指定一个整数的指针

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

int *pointer; int array1[25]; int addressOfArray; pointer = &array1[0]; addressOfArray = pointer; 

有可能这样做吗?

不是没有明确的演员,即

 addressOfArray = (int) pointer; 

还有一个警告:

6.3.2.3指针

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

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

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

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

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

不。

您正在尝试将“指向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“深度与浅层复制”)。

你可以这样做:

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

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