5

我可以将指针分配给整数变量吗?像下面这样。

int *pointer;
int array1[25];
int addressOfArray;

pointer = &array1[0];

addressOfArray = pointer;

有可能这样做吗?

4

5 回答 5

4

不,将指针分配给整数是无效的。这是对赋值运算符 (C99, 6.5.16.1p1) 的约束违规。编译器有权拒绝翻译带有指向整数赋值的指针的程序。

于 2012-05-07T20:58:39.570 回答
3

不是没有明确的演员表,即

addressOfArray = (int) pointer;

还有这个警告:

6.3.2.3 指针
...
6 任何指针类型都可以转换为整数类型。除非前面指定,结果是实现定义的。如果结果不能以整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。

所以结果不能保证是一个有意义的整数值。

于 2012-05-07T21:47:11.880 回答
1

它经常在嵌入式编程中完成,但有一些警告:

  • 该操作(很可能)需要强制转换,并且
  • 通常意味着您在没有操作系统的情况下工作或与 RTOS 密切合作(即驱动程序级开发)
于 2012-05-07T21:06:59.803 回答
1

没有。

您正在尝试将“指向 int 的指针”值分配给“int”变量。您肯定会收到编译器警告。你可以这样做:

int *pointer;
int array1[25];
int *addressOfArray;

pointer = &array1[0];
//The following commented lines are equivalent to the pointer assignment above and are also valid
//pointer = array
//pointer = &array[0]

addressOfArray = pointer;

这称为浅拷贝。如果您还不熟悉这个概念,我强烈建议您阅读它(谷歌“深拷贝与浅拷贝”)。

于 2012-05-07T21:08:26.537 回答
0

你可以这样做:

memcpy(&addressOfArray, &pointer, sizeof(int));

这将直接复制底层字节并取代强制转换运算符,但我绝对不会推荐它,除非您在系统上确定这一点sizeof(int) == sizeof(int *)

于 2012-05-07T21:04:28.783 回答