当我们声明双指针时,究竟是什么int/char(**q)

Viv*_*ek 1 c types pointers pointer-to-pointer

让我们采取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 
Run Code Online (Sandbox Code Playgroud)

我试过这个代码的和平如果有任何错误请纠正我

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); 
Run Code Online (Sandbox Code Playgroud)

产量

 p= 0x7fff669bb1bc r= 0x7fff669bb2a0 q=0x7fff669bb1a0
 p(increment)= 0x7fff669bb1c0 r (increment)= 0x7fff669bb2a1 q (increment)= 0x7fff669bb1a8
Run Code Online (Sandbox Code Playgroud)

int/ char/ float在双指针中的作用是什么?

Sou*_*osh 5

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

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

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

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