gpt4 book ai didi

c - 为什么下面的代码失败

转载 作者:行者123 更新时间:2023-12-04 10:28:08 24 4
gpt4 key购买 nike

#include <stdio.h>

int *top;
int a=1;
top=&a;

void main()
{
printf("%d\n",*top);
}
error C2440: 'initializing' : cannot convert from 'int *' to 'int'

更新

我知道如何让它工作,但我想问为什么它不起作用。

最佳答案

您实际上被编译器对古老的 C 语法的支持绊倒了。最初的 C 编译器允许没有类型的声明,默认为 int。所以在任何功能之外,

foo;

将声明一个名为foo 的全局int 变量。所以当你说

top = &a;

它声明了一个名为 top 的全局 int 变量,并尝试用 a 的地址对其进行初始化。这会导致您看到两个错误——top 的两个冲突声明以及无法将 int * 转换为 int。当然,那些同样古老的 C 编译器不会给你第二个错误,毫无怨言地愉快地将地址转换为 int。

这也告诉你为什么 int i; i = 100; 有效 --- i 的两个声明作为全局 int 变量(没关系,因为它们是同一类型),第二个将它初始化为 100(没关系,因为只有一个声明有一个初始化器)

Dennis Ritchie 的 The Development of the C Language 中有很多有趣的东西

关于c - 为什么下面的代码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911391/

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