请问:指针初始化与指针赋值有什么区别?

时间:2021-09-23 19:47:16
int* p=123;
the VC++ will give a error,say:cannot convert from 'const int' to 
'int *',Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

当赋值为NULL时,没有错误和警告;
int* p=0;

然而这样
int* p;
*p=123;
只有一个指针没有初始化的警告,为什么?
我想知道内存中是怎样工作的?

4 个解决方案

#1


int *p=123, 是给p赋值为123,p是一个指针,123 编辑器默认为 const int, 所以会报错!

int *p=0, 将指针初始值设为0, 0是一个特殊的常量,编辑器根据不同的情况进行处理,这里将它视为NULL指针。

int *p定义一个指向整形的指针,但是没有给它赋值,p现在是一个随机值!
*p=123, 给p指向的内存赋值为123,由于p没有赋初值,所以p指向的内存位置是随机的,虽然编辑的时候没有错,但很可能发生运得时的错误,因为程序将修改未知区域的内存!

应该这样:
int k;
int *p = &k;
*p = 123;  // Same as  k=123;

int *p = new int[1];
*p = 123;


#2


同意 WingfireWu(休息,休息一下...)的

int *p = new int[1];
*p = 123; 
......
delete p;
或者
int *p = new int(123);
...
delete p;
 

#3


int *p = new int[1];
*p = 123; 
......
delete [] p;//new的时候用了[],delete的时候也用[]

#4


无谓的补充:

int *p = new int(123);//开空间并初始化其值为123。
delete p;

int *p = new int[123];//开数组,不能初始化,规则这么说的。
delete [] p;//new的时候用了[],delete的时候也用[]

#1


int *p=123, 是给p赋值为123,p是一个指针,123 编辑器默认为 const int, 所以会报错!

int *p=0, 将指针初始值设为0, 0是一个特殊的常量,编辑器根据不同的情况进行处理,这里将它视为NULL指针。

int *p定义一个指向整形的指针,但是没有给它赋值,p现在是一个随机值!
*p=123, 给p指向的内存赋值为123,由于p没有赋初值,所以p指向的内存位置是随机的,虽然编辑的时候没有错,但很可能发生运得时的错误,因为程序将修改未知区域的内存!

应该这样:
int k;
int *p = &k;
*p = 123;  // Same as  k=123;

int *p = new int[1];
*p = 123;


#2


同意 WingfireWu(休息,休息一下...)的

int *p = new int[1];
*p = 123; 
......
delete p;
或者
int *p = new int(123);
...
delete p;
 

#3


int *p = new int[1];
*p = 123; 
......
delete [] p;//new的时候用了[],delete的时候也用[]

#4


无谓的补充:

int *p = new int(123);//开空间并初始化其值为123。
delete p;

int *p = new int[123];//开数组,不能初始化,规则这么说的。
delete [] p;//new的时候用了[],delete的时候也用[]