我怎样才能得到文字的地址?

时间:2014-09-28 07:46:50

标签: c literals memory-address

有没有办法获得文字的地址?

例如:

floar r = 1.0;
float area = r * r * 3.14;
float* addressOfPI = ? // TODO: Address of 3.14 in previous line

2 个答案:

答案 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不是文字。它是浮动常量