变量地址和整数地址之间的区别

Difference between address of a variable and integer

整数和&返回的地址有什么区别?

因此,在将整数赋值给整数指针时,为什么要将整数类型转换为整数指针?

整数和指向整数的指针是不同的类型。

  • 整数变量保存整数值。
  • 指针变量保存地址值。

以你的例子为例:

int value = 5;
int address = &value;
  1. valueint.
  2. 类型的变量
  3. &value returns 地址类型 int*
  4. address = &value 尝试将 int* 分配给 int

虽然整数可以转换为指针并返回,但这并不意味着地址一定是整数值。

就像您可以将 double 分配给 int 一样,您可以将 int * 分配给 int。但这不一定是你想要的,这就是编译器警告它的原因。 事实上,除非你的工作非常接近硬件(例如编写驱动程序),否则你不太可能需要在整数和指针之间进行转换。

无需任何转换的正确方法:

int * pointer = &value;

Whats the difference between integer and the address returned by & ?

我认为这个问题已经在评论中得到了解答。不同之处在于这些变量的类型。基本上 int = 整数类型和 *int = 指针类型。

此外:从 pointerint 的转换会导致未定义的行为。

Therefore, why should I type-cast integer to an integer pointer when assigning it to an integer pointer?

因为标准说:

C99 第 6.5.4 节和 6.5.16.1:

Conversions that involve pointers, other than where permitted by the constraints of 6.5.16.1, shall be specified by means of an explicit cast.

和 C++ 5.4 节:

Any type conversion not mentioned below and not explicitly defined by the user (12.3) is ill-formed.