在C ++中初始化指针

时间:2009-05-22 22:28:16

标签: c++ pointers initialization

可以在声明中指定一个指向值的指针吗?像这样:

    int * p = &(1000)

4 个答案:

答案 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);