首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于int* 赋值的有关问题

2012-09-23 
关于int* 赋值的问题C++ primer中说过,一个int* 可以用值为0的整常量表达式赋值或初始化。我想问下,枚举子

关于int* 赋值的问题
C++ primer中说过,一个int* 可以用值为0的整常量表达式赋值或初始化。
我想问下,枚举子难道不是整常量吗?
enum T{one=0,two};
而如果int a[two],这样是可以定义的,因为two是整常量,那么同样one也是整常量。
为什么int *p=one通过不了。


[解决办法]
因为规定!
必须是没有类型的才是0值。
[解决办法]
enum无法转换为指针,却可以隐式转换为int
[解决办法]
不过,如果你乐意,可以强制转换,这样编译器的抱怨也没用的。
int i = one;
int *p = (int*)one;
[解决办法]

探讨
C++ primer中说过,一个int* 可以用值为0的整常量表达式赋值或初始化。
我想问下,枚举子难道不是整常量吗?
enum T{one=0,two};
而如果int a[two],这样是可以定义的,因为two是整常量,那么同样one也是整常量。
为什么int *p=one通过不了。

[解决办法]
指针初始化为0,表示的是空指针NULL。
而枚举变量却是默认的整形常量!而非指针!
[解决办法]
你的 one 根本就不是1嘛, 你的 one=0
数组的下标不能是0

你直接写 
int a[0];
也是不行的.
[解决办法]
p是指针类型,而enum是枚举型.
[解决办法]
见3楼 强制类型转换基本破坏了c++所有的安全机制,我记得除了__thiscall类型函数指针不能强制转换外其他貌似都能强转
[解决办法]
我同意5楼的看法,int 0可以代表指针null,如果通过枚举类型的0不可以,所以不行。为什么枚举的0不能代表null我就不是特别清楚了,
[解决办法]
枚举不是常量,要转换类型才可以、
int* p= (int*)one;

热点排行