让我们拿64位机器
其中指针在64位机器中是8字节
int *p ; // it is a pointer to integer variable so when i increment p
// i.e., p++ it will increment by 4
char *r; // It is pointer to character .
// So if i increment 'r' it will increment by 1
int **q ; // if i increment q ie.,q++ it will increment 8 bytes
如果有任何问题我试过这个代码的和平请纠正我
int a=10;
int *p;
char *r;
int **q;
p=&a;
q=&p;
printf("p= %p\t r= %p\t q=%p\n",p,r,q);
printf("p(increment)= %p\t r (increment)= %p\tq (increment)= %p ",++p,++r,++q);
输出
p= 0x7fff669bb1bc r= 0x7fff669bb2a0 q=0x7fff669bb1a0
p(increment)= 0x7fff669bb1c0 r (increment)= 0x7fff669bb2a1 q (increment)= 0x7fff669bb1a8
int
/ char
/ float
在双指针中的作用是什么?
答案 0 :(得分:5)
引用postfix ++
运算符的属性,来自C11
,章节§6.5.2.4, Postfix递增和递减运算符,(强调我的< / em>的)
后缀
++
运算符的结果是操作数的值。作为副作用, 操作数对象的值递增(即适当类型的值1 添加到它)。 [...]
如果是int *p ;
,则p是指向int
类型的指针,因此增量将基于sizeof(int)
如果是int **p ;
,则p是指向int *
类型的指针,因此增量将基于sizeof(int *)
答案 1 :(得分:0)
嗯,这不仅取决于您的机器,还取决于您的实施。您可以输出sizeof p
,sizeof r
和sizeof q
来计算出来。打印sizeof (int *)
,sizeof (char *)
和sizeof (int **)
也可以。
传统上,C程序员喜欢知道很多(也许比他们更多 需要)关于底层机器实现。
从我的角度来看,你不需要知道这些东西,因为编译器会为我们(根据C标准)很好地处理这个问题。此外,大多数使用这些东西的做法本质上都是未定义的行为。
答案 2 :(得分:-2)
在int **p
中,您将指针增加指向它的大小(即指针)。由于指针的大小为8
,因此会增加8
。
最终类型在这里没有任何作用。它的行为与指向void
的指针的行为相同。