gpt4 book ai didi

可以将地址运算符应用于非整数类型的二维数组和 C 中结构的非整数字段吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:13 25 4
gpt4 key购买 nike

我看过一本C语言的书,它说,如果我们可以将地址运算符应用于整型二维数组(例如short、int、long)的元素。例如,如果类型是 float,那么我们必须使用临时变量。代码示例:

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 having not integral fields.

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++有这个限制吗?

最佳答案

我会认真考虑寻找新作者:

#include <stdio.h>
int main(int argc, char *argv[])
{
int i, j;
float arr[4][4];
for (i = 0; i < 2; ++i)
for (j = 0; j < 2; ++j)
scanf("%f", &arr[i][j]);

for (i=0;i<2;++i)
for (j=0;j<2;++j)
printf("%f\n", arr[i][j]);
return 0;
}

输入

1.01
2.01
3.01
4.01

输出

1.010000
2.010000
3.010000
4.010000

也许有关他/她的理由的更多信息会有所帮助,但除非有任何真正的肉用于此类声明,否则我会在我的鸟笼里放那本书。 可能他的主张背后有一些历史。我唯一能理解的是相关的是 float 的性质(即它的特定于实现的性质)。大多数人都使用 IEEE 754 single-prec 表示 float,double-prec 表示 double。但我给了他很大的自由度,让他可以尝试理解他对这一主张的逻辑。

关于可以将地址运算符应用于非整数类型的二维数组和 C 中结构的非整数字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com