Tag: 指针算术

* y ++和++ * y之间的区别?

我对如何执行此代码感到困惑。 假设我们有 int x=30,*y,*z; y=&x; * y ++和++ * y之间有什么区别? 以及该计划的产出是什么? #include int main(){ int x=30,*y,*z; y=&x; z=y; *y++=*z++; x++; printf(“%d %d %d “,x,y,z); return 0; }

C – 如何将数组中的指针转换为索引?

在C的许多搜索函数中(如果找到结果,脑海中浮现),将返回指向数组中点的指针。 如何将此指针转换为搜索的数组中的索引(使用指针算法,我假设)。

使用%u读取签名的字符

#include int main() { int i,n; int a = 123456789; void *v = &a; unsigned char *c = (unsigned char*)v; for(i=0;i< sizeof a;i++) { printf("%u ",*(c+i)); } char *cc = (char*)v; printf("\n %d", *(cc+1)); char *ccc = (char*)v; printf("\n %u \n", *(ccc+1)); } 该程序在我的32位Ubuntu机器上生成以下输出。 21 205 91 7 -51 4294967245 前两行输出我能理解=> 第1行 :在内存中存储字节的顺序。 第二行 :第二个字节值的有符号值(2的补码)。 […]

使用void指针指向数组

我只是试图使用一个指向整数数组的void指针,我试着看看是否可以通过将数组转换回int来打印数组。 但它给了我一些随机价值。 你能告诉我哪里出错了吗? #include #include int main(){ int a[5]; int x; int j; a[0]=1; a[1]=2; a[2]=3; a[3]=4; void *arr=a; for(j=0;j<4;j++){ x = *(int *)(arr+j); printf("%d",x); } return 0; } 输出是这样的: 133554432131072512 为什么它不是针对数组的元素a []即1,2,3,4?

是“int * ptr = *((&a)+ 1);”其中“a”是由标准明确定义的int ?

基于这个问题( c中的奇怪输出问题 )有一个答案( 由@Lundin提供 )关于这一行: int *ptr = (int*)(&a+1); 在哪里他说: the cast (int*) was hiding this bug 。 所以我带来了以下内容: #include int main( void ){ int a[5] = {1,2,3,4,5}; int *ptr = *( ( &a ) + 1 ); printf(“%d”, *(ptr-1) ); } 我想知道这是否: int *ptr = *( ( &a ) + 1 ); 标准明确定义了吗? 编辑 […]

结构的指针算法

给定一个包含一个double和三个int变量的结构定义(总共4个变量),如果p是指向此结构的指针,其值为0x1000,那么p ++有什么值? 这不是作业问题,所以不要担心。 我只是想为测试做准备,我无法弄清楚这个练习题。 谢谢 这是在C.是的,我希望p增加后的值。 这是一台32位机器

更改为指针算术

我是C的新手,我在弄清楚如何使用它们时遇到了很多麻烦。 我有一段代码,在void函数中有一些指针算术: void function(int n, int *a, int *b){ int *p,*q; q = b; int i; *b = 0; for (i = 1; i<n; i++) if(*(a+i) == *(a+i-1)) *(b+i)=0; else *(b+i)=1; } 我试图完全改变它只使用没有循环索引变量的指针算法。 到目前为止我已经得到了这个: void function(int n, int *a, int *b){ int *p,*q; q = b; *b = 0; for (p = a+1; p<a+n; p++) […]

两个指针变量之间的差异

我在书面测试中问过这个问题。 在我的lapi上运行下面的代码时,我得到10作为输出 #include int main() { int *i, *j;/* two pointer variable*/ i = (int *)60; j = (int *)20; printf(“%d \n”,ij); return 0; } 输出: 10 任何人都可以告诉我为什么输出是10 。

什么是令人信服的例子,指针算法比数组下标更可取?

我正在为一个介绍性的C类准备一些幻灯片,并且我试图提供使用指针算法而不是数组下标的好例子(和动机)。 我在书中看到的很多例子都相当。 例如,许多书籍展示了如何反转字符串中所有值的大小写,但除了用* p替换a [i]之外,代码是相同的。 我正在寻找一个好的(和简短的)单维数组的例子,其中指针算法可以产生明显更优雅的代码。 有任何想法吗?

C多维数组中奇怪的数组语法

我知道这是真的: x[4] == 4[x] 多维数组的等价物是什么? 以下是真的吗? x[4][3] == 3[x[4]] == 3[4[x]]