我可以指定一个整数变量的指针吗?如下所示。
int *pointer;
int array1[25];
int addressOfArray;
pointer = &array1[0];
addressOfArray = pointer;
可以这样做吗?
答案 0 :(得分:4)
不,分配指向整数的指针是无效的。这是对赋值运算符的约束违反(C99,6.5.16.1p1)。编译器有权拒绝使用指向整数赋值的指针转换程序。
答案 1 :(得分:3)
不是没有明确的演员,即
addressOfArray = (int) pointer;
还有一点需要注意:
6.3.2.3指针
...
6任何指针类型都可以转换为整数类型。除非事先指明,否则 结果是实现定义的。如果结果无法以整数类型表示, 行为未定义。结果不必在任何整数的值范围内 类型。
因此结果不能保证是有意义的整数值。
答案 2 :(得分:1)
它经常在嵌入式编程中完成,但有一些注意事项:
答案 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 *)
。