1

让我们拿 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

4

3 回答 3

5

引用后缀++运算符的属性,来自C11第 §6.5.2.4 章,后缀递增和递减运算符,(强调我的

后缀++运算符的结果是操作数的值。作为副作用,操作数对象的值会递增(即,将相应类型的值 1添加到其中)。[...]

  • 在 的情况下int *p ;, p 是指向 type 的指针int,因此增量将基于sizeof(int)

  • 在 的情况下int **p ;, p 是指向 type 的指针int *,因此增量将基于sizeof(int *)

于 2016-02-01T07:14:25.903 回答
0

好吧,这不仅取决于您的机器,还取决于您的实现。您可以通过输出sizeof psizeof r和来计算它们sizeof q。打印sizeof (int *), sizeof (char *), 也sizeof (int **)可以。

传统上,C 程序员喜欢了解很多(可能比他们需要的更多)关于底层机器实现的知识。

从我的角度来看,你不需要知道这些东西,因为编译器会很好地为我们处理这些(根据 C 标准)。此外,大多数使用这些东西的实践本质上是未定义的行为。

于 2016-02-01T07:54:35.953 回答
-2

int **p您将指针增加它指向的大小(即指针)。由于指针的大小是8,它将增加8

final 类型在这里没有作用。它的行为与指向指针的指针相同void

于 2016-02-01T07:09:35.337 回答