这是一个新手C++指针问题.我不知道为什么会发生这种情况......
我发现如果我写这段代码.这完全有效.
代码1
int *j; //create an pointer j
*j = 50; //assign 50 to the *j, meaning value pointed by address 50 is xxx
Run Code Online (Sandbox Code Playgroud)
但是,当我想尝试使它更简单.编译器给我这个错误信息.
码2
int *j = 50; //i guess this should be the same with Code1...
Run Code Online (Sandbox Code Playgroud)
编译错误
error: invalid conversion from ‘int*’ to ‘int’
Run Code Online (Sandbox Code Playgroud)
那么为什么会那样?
Cha*_* Ma 13
那里的C语法有点含糊不清.
int *j = 50;
Run Code Online (Sandbox Code Playgroud)
相当于
int *j;
j = 50;
Run Code Online (Sandbox Code Playgroud)
实际上,你在第一段代码中所做的是危险的,因为在为它分配值之前你还没有为j分配任何内存.你需要像这样为它制作内存:
在C:
int *j = (int*) malloc(sizeof(int));
*j = 50;
Run Code Online (Sandbox Code Playgroud)
在C++中
int *j = new int;
*j = 50;
Run Code Online (Sandbox Code Playgroud)
或者将指针指向已经有效的其他内存块:
int k;
int *j = &k;
*j = 50;
printf("%d", k); // 50
Run Code Online (Sandbox Code Playgroud)
编辑:值得指出的是,歧义与'*'符号有关.在声明中,int *j;*j表示"名为j的指针".但是当您在第二行"*j = 50"中使用它时,*将成为取消引用符号,表示"地址j处的值".