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 に答える
-2

ではint **p、ポインターが指すサイズ (つまりポインター) だけポインターをインクリメントします。ポインタのサイズは である8ため、 だけインクリメントされ8ます。

ここでは、final 型の役割はありません。へのポインタへのポインタと同じように動作しますvoid

于 2016-02-01T07:09:35.337 に答える