有没有办法获得文字的地址?
例如:
floar r = 1.0;
float area = r * r * 3.14;
float* addressOfPI = ? // TODO: Address of 3.14 in previous line
答案 0 :(得分:3)
像3.14
这样的文字是右值,它们没有地址。这是左值和右值之间的差异。
答案 1 :(得分:1)
在C中,取浮点常量的地址(OP' s"字面值")或整数常量不可用。这是一个" rvalue"或"表达式的值"而且没有地址。
然而,获取复合文字(C99)的地址是可以的。
// Add more types as needed
#define constant_address(X) _Generic((X), \
double : &((double){X}), \
float : &((float){X}), \
unsigned: &((unsigned){X}), \
int : &((int){X}), \
default: 0 \
)
int main(void) {
#define MY_PI 3.1415926535897932384626433832795
double *addr_pi = constant_address(MY_PI);
printf("%f %p\n", *constant_address(MY_PI), (void *)constant_address(MY_PI));
printf("%f %p\n", *addr_pi, (void *)addr_pi);
printf("%8d %p\n", *constant_address(1234), (void *)constant_address(1234));
return 0;
}
输出
3.141593 0x28cbb0
3.141593 0x28cba8
1234 0x28cbc0
要明确:在C语言中,代码可以获取文字的地址。然而3.14
不是文字。它是浮动常量。