可以在声明中指定一个指向值的指针吗?像这样:
int * p = &(1000)
答案 0 :(得分:23)
是的,您可以初始化指向声明值的指针,但是您不能这样做:
int *p = &(1000);
&安培;是运算符的地址,你不能将它应用于常量(尽管如果可以的话,这将是有趣的)。尝试使用另一个变量:
int foo = 1000;
int *p = &foo;
或打字:
int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc
答案 1 :(得分:7)
问题中有两件事我不清楚。是否要将指针设置为特定值(即地址),或者是否要将指针指向某个特定变量?
在后一种情况下,您可以使用address-of运算符。然后将指针的值设置为some_int_variable
的地址。
int *p = &some_int_variable;
*p = 10; // same as some_int_variable = 10;
注意:接下来是手动改变指针的值。如果你不知道你是否想这样做,你不想这样做。
在前一种情况下(即设置为某个特定的给定地址),您不能只做
int *p = 1000;
由于编译器不会接受int并将其解释为地址。您必须告诉编译器它应该明确地执行此操作:
int *p = reinterpret_cast<int*>(1000);
现在,指针将引用地址1000处的某个整数(希望如此)。请注意,结果是实现定义的。但是,这就是语义,这就是你告诉编译器的方式。
更新:委员会修正了注释建议的reinterpret_cast<T*>(0)
的奇怪行为,我之前提供了解决方法。 See here
答案 2 :(得分:5)
怎么样:
// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000);
经过测试和工作。 ; - )
答案 3 :(得分:2)
庵。我不认为你可以采用像这样的常量的非常量地址。
但这有效:
int x = 3;
int *px = &x;
cout << *px; // prints 3
或者这个:
const int x = 3;
const int *px = &x;
const int *pfoo = reinterpret_cast<const int*>(47);