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)
问题中有两件事我不清楚.是否要将指针设置为特定值(即地址),或者是否要将指针指向某个特定变量?
在后一种情况下,您可以使用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)了笔记所暗示的奇怪行为,我之前提供了解决方法.看到这里.
关于什么:
// Creates a pointer p to an integer initialized with value 1000.
int * p = new int(1000);
Run Code Online (Sandbox Code Playgroud)
经过测试和工作.;-)