标题:资深学者,你好,请教一个指针基础问题
只看楼主
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 

我个人觉得 int *p=77; 是很危险的........我写菜单程序的时候需要保存被覆盖的图象,结果没注意,就犯了这样的错误,一下子就存了几百的数据覆盖到了系统地址,马上被强行终止了.....

学好、用活指针真是学C语言的一大难点啊!!!!!


淘宝杜琨
2004-08-06 15:59
wonderfulday
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2004-7-28
得分:0 
以下是引用mikewolf在2004-08-06 12:10:35的发言: p指针没有初始化,非常明显,p的值是随机的.如果p的值所指向的物理地址存储了重要的内容,那么此语句就会改写其中的内容,严重的后果可能会引起系统崩溃!当然如果物理地址77为空闲空间的话,还没什么问题,不过谁也不敢保证它是否是空闲的,所以还是应当在使用指针之前初始化!
是不是说: 在初始化之前一定不要赋值,否则p会随机找一个地址,然后把值赋给这个随机地址

2004-08-06 19:54
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
得分:0 
[QUOTE]

是不是说: 在初始化之前一定不要赋值,否则p会随机找一个地址,然后把值赋给这个随机地址

[/QUOTE]

对 int *p=77 这样写后果的确是难以想象的 至于什么后果我没有试过 只知道理论上行不通 不过你也可以实践一下


点 鼠 标 , 救 饥 民 http://www./
2004-08-06 21:13
wonderfulday
Rank: 1
等 级:新手上路
帖 子:97
专家分:0
注 册:2004-7-28
得分:0 

int *p=77;

printf("%d",*p);

可以运行,但报错


2004-08-06 22:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 
以下是引用天使预备役在2004-08-06 14:56:19的发言:

谢谢,不过还是不太明白!!!!

满脑子浆糊了!!!

我在一个程序中象 int *p=77;这样定义了几十个指针也没有出现调处程序的现象!!!

现在能做的就是用最规范的方式使用指针!!!

这样肯定是不行的。我不知道你是否理解了 int *p=77;?如果你这样在一个程序中定义了几十个,而未对p(或者是p们,哈哈,几十个当然得称为“们”了)进行操作,当然是无影响的。

但是,如果你后续程序中对p们进行了写操作(即赋值,)程序还是能正常行的话,那么,我要恭喜你了,快去买彩票,你要中大奖了!

另:建议斑竹将此贴置顶一星期,对指针不够了解的人看看有好处。

[此贴子已经被作者于2004-08-06 23:53:48编辑过]


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-08-06 23:47
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

我对他们进行符值了,不出问题,就是警告!!!

我想成这样:int *p=77;是对指针申请的两个字节的存放地址空间值的变化,这个可以,因为你已经申请了空间说明这个

空间没有被利用在后面也不会被利用,所以你可以改变不会有问题(但并不是说他对,只是说这一句不会引起乱符值,但

你申请指针就是要用,如果这样写在后面用的时候还是要符值,不能直接就用!!!!);但如果在定义完后用*p=77;

就不对了,因为这时候改变的已经不是指针申请两个字节空间的内容的改变,而是改变以这两个字节中内容为地址的空

间的内容,因为它指的地址不确定所以会出现错误!!!同时,我想关于上面int *p=77;不可以,而char

*p="77777777777";可以,是不是又可以理解为:因为C的机制的原因,char *p="777777777777";可以的原因是因为,

两个字节的空间不可能同时存下这个空间,所以C会自己申请空间,同时把这个空间的首地址符给p.


差点把你忘了...
2004-08-09 09:47
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 
我怎么找不到怎么置顶!!!!

差点把你忘了...
2004-08-10 09:46
指向指针的指针
Rank: 1
等 级:新手上路
帖 子:339
专家分:0
注 册:2004-8-8
得分:0 

各位大侠声明一个指针(int *p;)后是不是系统就给这个指针自动分配了个地址?这个地址是什么?没有用的?是不是*p就可能覆盖了这个地址原有的数据?

是不是 *p=77; 是错误的? 如果 int a=77; *p=a; 错了没有?? 那 int a=77; p=&a; 是对是错?

[此贴子已经被天使预备役于2004-08-11 09:09:33编辑过]


/sign.png" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('http://www./sign.png');}" onmousewheel="return imgzoom(this);" alt="" />
2004-08-10 20:08
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

我们正在讨论,按理说前两个假设是错的,

如果最后一个也错,那没有天理了,这就是初始化!!!

还的探讨:理是越辩越明!!!


差点把你忘了...
2004-08-11 09:13
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 
兄弟啊,帮忙置个顶!!!

差点把你忘了...
2004-08-11 09:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-3936-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.154818 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved