私によると、次のコードは正常に実行されるはずですが、実行時に失敗します.理由がわかりません:
 void main()
 {
   int arr[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int *m=arr[0];
   int **p=&m;
   p=p+1;
   printf("%d",**p);
  }
a.exe は、gcc コンパイラ、Windows 7 64 ビットで実行時に動作を停止しました
私によると、次のコードは正常に実行されるはずですが、実行時に失敗します.理由がわかりません:
 void main()
 {
   int arr[5][3]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int *m=arr[0];
   int **p=&m;
   p=p+1;
   printf("%d",**p);
  }
a.exe は、gcc コンパイラ、Windows 7 64 ビットで実行時に動作を停止しました
ラインと
int **p=&m
整数へのポインターへのポインターを作成します。
次に、アドレスに 1 を追加します。つまり、次の整数を指すバイト数の 1 倍ではなく、1 つのメモリ アドレスです。
次に、それを 2 回参照します。
ここint **p=&m;に。pを指しmます。次に、 p が(integer)p = p + 1;の次のアドレスを指す場合。mそのアドレスにアクセスできない可能性があります。