olo*_*ovb 13 c memory pointers
我想我已经在某处读过,在C中取一个枚举值的地址是非法的(枚举值不是左值;但是,我现在找不到任何关于此的信息).这是正确的,如果是的话,为什么?
编辑:
这是一个例子,用上面的"枚举值"来澄清我的意思.我的意思是取first_value下面的地址,而不是获取枚举的实际实例的地址:
enum myenum
{
first_value,
second_value
};
Run Code Online (Sandbox Code Playgroud)
Mar*_*n B 27
"枚举值"略显含糊; 但是,我认为你的意思是:
enum myenum
{
first_value,
second_value
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,取地址是违法的first_value.这样做的原因是first_value内存中实际上并不存在......它只是一个常数,实际上是数字0的另一个名称(当然,你也不能取地址).
另一方面,如果你的意思是你是否可以获取声明为枚举的变量的地址:
enum myenum x;
enum myenum *mypointer=&x;
Run Code Online (Sandbox Code Playgroud)
那绝对是可能的.
小智 18
如果你有:
enum E {
X, Y, Z
};
Run Code Online (Sandbox Code Playgroud)
那么你不能取X,Y或Z的地址,只能取0,1或2的地址.
但是,您可以获取枚举实例的地址:
typedef enum {
X, Y, Z
} E;
int main() {
E e;
E * ep;
ep = & e;
}
Run Code Online (Sandbox Code Playgroud)
Bas*_*ard 10
枚举用于替换#define链:
#define SUCCESS 0
#define LITTLE_ERROR 1
#define BIG_ERROR 2
Run Code Online (Sandbox Code Playgroud)
这可以替换为:
enum
{
SUCCESS,
LITTLE_ERROR,
BIG_ERROR
};
Run Code Online (Sandbox Code Playgroud)
枚举值,例如SUCCESS仅仅是整数常量的符号,不会存储在程序存储器的任何位置.因此,取其地址是没有意义的.
| 归档时间: |
|
| 查看次数: |
12321 次 |
| 最近记录: |