在C++中初始化指针

Ale*_*lex 9 c++ pointers initialization

可以在声明上指定一个值的指针吗?像这样的东西:

    int * p = &(1000)
Run Code Online (Sandbox Code Playgroud)

Ada*_*itz 23

是的,您可以在声明时初始化指向值的指针,但是您不能这样做:

int *p = &(1000);
Run Code Online (Sandbox Code Playgroud)

&是运算符的地址,你不能将它应用于常量(尽管如果可以的话,这将是有趣的).尝试使用另一个变量:

int foo = 1000;
int *p = &foo;
Run Code Online (Sandbox Code Playgroud)

或者输入:

int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc
Run Code Online (Sandbox Code Playgroud)

  • 字符串常量是特例吗?虽然那需要是一个"常见问题*"...... (3认同)
  • 是的,字符串文字的特殊之处在于它们是左值表达式,指的是数组对象(不是指针).所以你可以做'char const(*p)[3] =&"01";' 同样有趣的是初始化一个char const*:'char const*p =&"hello there"[0];' (3认同)

Joh*_*itb 7

问题中有两件事我不清楚.是否要将指针设置为特定值(即地址),或者是否要将指针指向某个特定变量?

在后一种情况下,您可以使用address-of运算符.的的指针的然后被设置到地址some_int_variable.

int *p = &some_int_variable;
*p = 10; // same as some_int_variable = 10;
Run Code Online (Sandbox Code Playgroud)

注意:接下来是手动改变指针的值.如果你不知道你是否想这样做,你不想这样做.

在前一种情况下(即设置为某个特定的给定地址),您不能这样做

int *p = 1000;
Run Code Online (Sandbox Code Playgroud)

由于编译器不会接受int并将其解释为地址.您必须告诉编译器它应该明确地执行此操作:

int *p = reinterpret_cast<int*>(1000);
Run Code Online (Sandbox Code Playgroud)

现在,指针将引用地址1000处的某个整数(希望如此).请注意,结果是实现定义的.但是,这就是语义,这就是你告诉编译器的方式.

更新:委员会修正reinterpret_cast<T*>(0)了笔记所暗示的奇怪行为,我之前提供了解决方法.看到这里.


Tam*_*man 5

关于什么:

// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000); 
Run Code Online (Sandbox Code Playgroud)

经过测试和工作.;-)

  • 但别忘了删除! (6认同)