#include <stdio.h>
int *top;
int a=1;
top=&a;
void main()
{
printf("%d\n",*top);
}
Run Code Online (Sandbox Code Playgroud)
error C2440: 'initializing' : cannot convert from 'int *' to 'int'
UPDATE
我知道如何使它工作,但我问为什么它不起作用.
你实际上是在嘲笑编译器对古老C语法的支持.原始C编译器允许没有类型的声明,将其默认为int.所以在任何功能之外,
foo;
Run Code Online (Sandbox Code Playgroud)
会声明一个int名为的全局变量foo.所以当你说
top = &a;
Run Code Online (Sandbox Code Playgroud)
它声明了一个调用的全局int变量,top并尝试使用地址初始化它a.这会给你看到两个错误 - 两个冲突的声明top和无法转换int *为int.当然,那些相同的古老C编译器不会给你第二个错误,愉快地将地址转换为int而没有抱怨.
这也告诉你为什么int i; i = 100;工作---它i作为一个全局int变量的两个声明(这是好的,因为它们是相同的类型),第二个初始化它100(这是好的,因为只有一个声明有一个初始化器)
Dennis Ritchie的"C语言的发展"中有很多有趣的东西
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |