指定一个整数的指针

时间:2012-05-07 20:57:54

标签: c pointers assignment-operator

我可以指定一个整数变量的指针吗?如下所示。

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

pointer = &array1[0];

addressOfArray = pointer;

可以这样做吗?

5 个答案:

答案 0 :(得分:4)

不,分配指向整数的指针是无效的。这是对赋值运算符的约束违反(C99,6.5.16.1p1)。编译器有权拒绝使用指向整数赋值的指针转换程序。

答案 1 :(得分:3)

不是没有明确的演员,即

addressOfArray = (int) pointer;

还有一点需要注意:

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

因此结果不能保证是有意义的整数值。

答案 2 :(得分:1)

它经常在嵌入式编程中完成,但有一些注意事项:

  • 操作(最有可能)需要强制转换,
  • 通常意味着您在没有操作系统的情况下工作或与RTOS密切合作(即驱动程序级开发)

答案 3 :(得分: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;

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

答案 4 :(得分:0)

你可以这样做:

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

哪个会直接复制底层字节并取代转换操作符,但我绝对不会推荐它,除非您确定系统上的sizeof(int) == sizeof(int *)