c言語オペレータ「++」の別の動作

1389 ワード

通常、++を使用します.
int a = 1;
a++;
printf(“%d”,a);//2;
 
簡単で何も言うことはありません.
 
#include <stdio.h>
 
int
main()
{
    int a = 2 ;
    int *p =  &a ;
    int b[5][10] = {4} ;
    int (*q)[10] = b ;
    
    printf("p1:%d,p2:%d,*p=%d",p++,p); 
    printf("
"
);
    printf("ap1:%d,ap2:%d",q++,q);
}

最初の出力の2つの数は4差があるはずです.私のはp 1:-1077032260 p 2:-1077032256です.
2番目の出力は40差があるはずです.私のはap 1:1077032468です.  ap2:-1077032428
 
pとqはポインタであり、その値はメモリ内のデータのアドレスを指す.
それらが指すデータはすべて独自のデータ型を持っていて、このデータ型は1つの型と見なすことができて、intの型は4 Bitの大きいです.
あるデータ型へのポインタを操作する(i++,--i,データを取り,データを格納する)ことは,実際にはこのようなデータ型のモジュールを基本単位としてポインタを操作する.
ポインタを++操作し,実際にはこのようなデータ型を指すポインタを用いて次の同じデータ型のデータのメモリ内アドレスを取得し,アドレスのオフセットはモジュールのサイズに応じて決定する.
ポインタの値(つまり次のデータのメモリアドレス)には、このデータ型(モジュール)のサイズが加算されます.