为什么gcc没有发现这个错误?
main()
{
struct NONE_STRUCT *foo;//NONE_STRUCT 未在任何地方定义,自己乱写的
printf("foo is %dn", foo);
}
为什么NONE_STRUCT 未在任何地方定义, gcc却编译通过,而且运行正常,显示为foo is 1073828704之类的结果?
环境: RedHat 9.0(2.4.20-
gcc v3.2.2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
>>
>>
>>指向空结构体的指针,我个人认为说到底还是int型,因为指针本身就是int型,只不过是特殊的数,
>>其值指向内存中某一个地址,而且该地址代表一个struct结构,但是该结构为空。不知道这样说对
>>不对。
>>
>>
>>
>>
>>这两者的区别是在内存中地存储方式不一样,前一个以结构体的形式进行存储,
>>后一个使用一般变量的存储方式。例如int就是一个变量元素,通常不可再进行
>>划分,程序读取的时候一般对整个int变量进行操作;但是对于结构体不是这样,
>>由于结构体含有自己的成员(你这里的定义为空,就是没有成员),所以结构体
>>在内存中还可以按照成员元素来进行进一步的划分并独立操作。
>>
>>下面简单的表示了一下变量和结构体在内存中的分布情况:
>>变量(通常为一个操作单元):
>>+------------+
>>| 1 |
>>+------------+
>>
>>结构体(通常为元素个数个操作单元):
>>+--------------------------------------------+
>>| 1 | 2 | 3 | 4... |
>>+--------------------------------------------+
>>
>>其中每一个操作单元可以是各种类型的变量(int、char、point....)
>>
>>
不过,那个空结构指针到底是什么东西呢,它跟这样定义
int *foo1;
的指针有什么区别呢?这个foo1没有初始化,值也是不确定的啊!
多谢Bayweb 指点!~
>>
>>
>>你要是使用-Wall参数编译,应该有警告信息,是关于printf("foo is %dn", foo);中
>>foo类型的警告。在这里,foo是一个NONE_STRUCT 型的空结构指针。之所以是空结
>>构指针,是因为NONE_STRUCT 是未定义的,实际上就是定义了一个指针变量,但是
>>没有赋给任何值,所以是一个空指针,其值不确定。
>>
>>
那是个什么类型的指针呢?
类型中的错误为什么不报呢?
foo,只是个指针而已。