如何才是指针的初始化,初始化的方式有几种呢?

wycfgq 2009-11-17 01:20:10
如何才是指针的初始化,初始化的方式有几种呢?
int *p; 以上是指针的定义吧。(此时仅是定义,但没有初始化,所以说指针可以先定义,再初始化) int *

int *p;
以上是指针的定义吧。(此时仅是定义,但没有初始化,所以说指针可以先定义,再初始化)

int *p=10;
以上是指针的定义同时初始化吧。

int *p;
p=new int;
以上是指针的先定义,后初始化吧?

所以我认为,指针的初始化有两种方式,
一种是定义的同时初始化,如:
int *p=7;
另一种是,先定义,再初始化
int *p;
p=new int;

除了这两种初始化方式,还有别的方式吗?




...全文
1407 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
llaaddoo 2009-11-17
  • 打赏
  • 举报
回复
JF
taodm 2009-11-17
  • 打赏
  • 举报
回复
楼主,就扔了你那个破网文,别那么执著了。
lkforever1006 2009-11-17
  • 打赏
  • 举报
回复
举个实际的例子:
int main()
{
int* p;
*p = 5;
}

编译器会警报指针未初始化就被使用:
warning C4700: uninitialized local variable 'p' used
如果在第一次使用p之前,对他赋予了一个值:
int main()
{
int* p;
//中间可以有无数不使用p的代码
p = new int;
if(p)
*p = 5;
}
编译器不再报错,因为使用的p指针已经被初始化了。
总之,第一次使用之前,对指针赋予值,就叫做指针初始化。
yyc23 2009-11-17
  • 打赏
  • 举报
回复
指针的初始化有两种。
一种是初始化为NULL
例如:
int *p;
p=NULL;

另一种是初始化为合法的内存
例如:
int n=2;
int *p;
p=&n;
lkforever1006 2009-11-17
  • 打赏
  • 举报
回复
只要你定义一个指针,在第一次使用它之前给他赋予一个值,就叫做初始化了。
所以,不存在有多少种方式的说法。

另外,int* p = 7; 这句是有问题的,7是一个int型对象,你把它赋给了p,而p是一个int*对象。
C++中正确的写法应该是int* p = (int*)7;
keyhzn 2009-11-17
  • 打赏
  • 举报
回复
哈哈!指针初始化只是在定义时候给他一个初值,
指针定义完,有的编译器会给他一给随机的值,以免没有给他赋值,直接使用,造成不好的结果,建议定义完给他一个初始值;

int *p=0;
这样我们在使用就可以很好的判断
if (p)
{
...
}
指针free后,最好也给赋值
free(p);
p = 0;
不然地址是free,但他的地址还存在p里面;

指针本身也有存储单元,他保存在载里面,而的所保存的值是某个地址;
meizimeizi163 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 loaden 的回复:]
int* p = NULL; 的意思是不知道写信的地址,那你*p这封信要寄给谁呢?

int* p; 由于信的地址地址不确定,万一寄给了奥巴马怎么办?

int* p = new int; 你知道了你女朋友的邮件地址,可是,你还没想好是否要写信。

int* p = new int(520); 你不但知道你女朋友的邮箱地址,还给了封信,内容是520(我爱你)
[/Quote]

此种说法很形象。
也可以这样:
int i=10;
int *p=&i;
iamzhangyong 2009-11-17
  • 打赏
  • 举报
回复
指针一般是定义的同时就应该进行初始化,否则会出现指针无法指向正确的地址···
wycfgq 2009-11-17
  • 打赏
  • 举报
回复
谁能举个例子,如何实现先定义,后初始化呢?

以上的例子,都是定义指针的同时,就初始化它,
但是网友说,指针可以先定义,然后再初始化,能举例说明吗?
即先定义一个指针,但是不初始化,然后用另一条语句对指针初始化。

因为指针与引用的区别就是:指针可以先定义,然后再初始化,但是引用在定义的同时,就必须初始化,我就是不明白这种区别?
「已注销」 2009-11-17
  • 打赏
  • 举报
回复 5
int* p = NULL; 的意思是不知道写信的地址,那你*p这封信要寄给谁呢?

int* p; 由于信的地址地址不确定,万一寄给了奥巴马怎么办?

int* p = new int; 你知道了你女朋友的邮件地址,可是,你还没想好是否要写信。

int* p = new int(520); 你不但知道你女朋友的邮箱地址,还给了封信,内容是520(我爱你)
wycfgq 2009-11-17
  • 打赏
  • 举报
回复
有人说,指针可以先定义,后初始化,可是按照以上各位的说法,定义的同时就是初始化呀,
谁能举个例子,先定义,然后再初始化呢

??????????????????????????????????
「已注销」 2009-11-17
  • 打赏
  • 举报
回复
这里,楼主要分清两个值。

一个是p的值,这个值的类型是指针,是一个内存地址。
一个是对指针解引用后得到的值:*p,是这个内存地址所存的值。

p就像一封信的地址。而*p就像那封信。
「已注销」 2009-11-17
  • 打赏
  • 举报
回复 2
什么叫初始化?
初始化:定义即有值。

所以,只有在定义的同时,用等号赋值,才叫初始化。

例如:

int* p = NULL; // 这是初始化,p的值是0
int* p = new int; // 这也是初始化,p的值为new返回的内存地址,大小是4字节,但该地址的对应的int值不确定。
int* p = new int(888); // 这种初始化,其地址对应的值是888,如果此时输出:*p,会得到888
jackyjkchen 2009-11-17
  • 打赏
  • 举报
回复
第一种和第二种本质上就不一样,第一种只是把指针地址赋值为10,第二种则是分配了内存。

int *p=new int; 你倒可以认为和第二种一样

int *p;
p=10;
你可以认为和第一种一样。

第一种方式的内存是否合法,取决于你的赋值,而第二种内存绝对合法(只要不分配失败)

飞天御剑流 2009-11-17
  • 打赏
  • 举报
回复
int *p;
p=new int;
以上是指针的先定义,后初始化吧?
-------------------------------
这不是初始化,是赋值。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧