-6

2を印刷したいのに3を印刷します。1回だけインクリメントしている理由がわかりません。また、これがポインター t ポインターの正しい使用法であるかどうか教えてください。ポインターへのポインターがどのように機能するかを確認するためのサンプル コードを作成しました。

#include<stdio.h>
void main(){
int a1[] = {1,2,3,4,5,6};
int a2[] = {7,8,9,10,11,12};
int *a3 = a1;
int *a4 = a2;
int **a[2];
a[0] = a3;
a[1] = a4;

printf("%d",*(++(*a)));



}
4

6 に答える 6

2
a[0] = &a3;
a[1] = &a4;

printf("%d",*(++(**a)));

定義によると、 a には int ポインターへのポインターが含まれていると想定されています。したがって、a3 と a4 の前に & を追加する必要があります。printf では、同じ理由でインクリメントする前に逆参照を 2 回使用する必要があります。

于 2013-07-09T06:13:18.970 に答える
2

どうやら、64 ビットのポインターと 32 ビットの int を使用するコンパイラーを使用しているようです。a誤って宣言したため、*aインクリメントすると、int のサイズ (4 バイトである 32 ビット) ではなく、ポインターのサイズ (8 バイトである 64 ビット) でインクリメントされます。 2 int のサイズだけインクリメントします。

の宣言をaに変更

int* a[2];

そしてあなたのプログラムは正しく動作します。また、(少なくとも) -Wall を指定してコンパイルすると、警告が表示されます。

于 2013-07-09T06:28:24.660 に答える
0

ポインター自体をインクリメントし、再度印刷しています..

そう、

printf("%d",*(++(*a)));//would print 2

printf("%d",*(++(*a)));//would print 3

使用する必要があります*((*a)+1)

于 2013-07-09T06:07:08.290 に答える