我读了一本 C 书,它说,如果我们可以将地址运算符应用于二维整数类型数组的元素(例如 short、int、long)。例如,如果类型是浮点数,那么我们必须使用临时变量。代码示例:
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 */
但这不行:
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 */
}
作者说 struct 没有整数字段也存在同样的问题。
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 扩展名的新文件),它可以正常工作而无需使用临时变量
这是历史问题 -老C风格?
C++ 中有这个限制吗?