Cの本を読んだところ、アドレス演算子を整数型(short、int、longなど)の2次元配列の要素に適用できれば、と書かれています。たとえば、型が float の場合、temp 変数を使用する必要があります。コード例:
int i, j;
int arr[4][4];
for (i = 0; i < 2; ++i)
for (j = 0; j < 2; ++j)
scanf("%d", &a[i][j]); /* OK because of int type */
しかし、これはOKではありません:
int i, j;
float arr[4][4];
for (i = 0; i < 2; ++i)
for (j = 0; j < 2; ++j)
scanf("%f", &a[i][j]); /* NOT OK because of float type - not integral type */
一時変数を使用する必要があります。
int i, j;
float temp;
float arr[4][4];
for (i = 0; i < 2; ++i)
for (j = 0; j < 2; ++j) {
scanf("%f", &temp); /* OK */
a[i][j] = temp; /* then assign back to element of 2d array */
}
著者は、整数フィールドを持たない構造体と同じ問題を言います。
typedef struct {
char name[20];
int id;
float grade;
} Student;
...
Student s;
float temp;
scanf("%d", &s.id); /* OK becuase of integral type */
/* scanf("%f", &s.grade); NOT OK because of float type */
scanf("%f", &temp); /* OK */
s.grade = temp; /* assign back */
著者はCで言うだけで、それは説明していません。Visual Studio 6.0、Visual Studio 2010 (拡張子 .c の新しいファイルを追加) でプログラムをテストしているので、temp 変数を使用しなくても正常に動作します
。履歴の問題ですか?古いCスタイル?
そして、C++ にこの制限はありますか?