我可以将指针分配给整数变量吗?像下面这样。
int *pointer;
int array1[25];
int addressOfArray;
pointer = &array1[0];
addressOfArray = pointer;
有可能这样做吗?
我可以将指针分配给整数变量吗?像下面这样。
int *pointer;
int array1[25];
int addressOfArray;
pointer = &array1[0];
addressOfArray = pointer;
有可能这样做吗?
不,将指针分配给整数是无效的。这是对赋值运算符 (C99, 6.5.16.1p1) 的约束违规。编译器有权拒绝翻译带有指向整数赋值的指针的程序。
不是没有明确的演员表,即
addressOfArray = (int) pointer;
还有这个警告:
6.3.2.3 指针
...
6 任何指针类型都可以转换为整数类型。除非前面指定,结果是实现定义的。如果结果不能以整数类型表示,则行为未定义。结果不必在任何整数类型的值范围内。
所以结果不能保证是一个有意义的整数值。
它经常在嵌入式编程中完成,但有一些警告:
没有。
您正在尝试将“指向 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;
这称为浅拷贝。如果您还不熟悉这个概念,我强烈建议您阅读它(谷歌“深拷贝与浅拷贝”)。
你可以这样做:
memcpy(&addressOfArray, &pointer, sizeof(int));
这将直接复制底层字节并取代强制转换运算符,但我绝对不会推荐它,除非您在系统上确定这一点sizeof(int) == sizeof(int *)
。