标题:资深学者,你好,请教一个指针基础问题
只看楼主
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 
p指针没有初始化,非常明显,p的值是随机的.如果p的值所指向的物理地址存储了重要的内容,那么此语句就会改写其中的内容,严重的后果可能会引起系统崩溃!当然如果物理地址77为空闲空间的话,还没什么问题,不过谁也不敢保证它是否是空闲的,所以还是应当在使用指针之前初始化!
2004-08-06 12:10
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

我想明白了!!!谢谢!!!!

声明时是分配了内存,但里面的内容是不定的,而*p=77;就是对这个未定的内容表示的地址的内

容进行改变了,因为不确定,所以不可以轻易的改!!!

如果写成 int *p=77;对么????

[此贴子已经被作者于2004-08-06 13:11:26编辑过]


差点把你忘了...
2004-08-06 13:06
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 
一般情况下也不对!但是除非,你能确定物理地址77是你想要的存储空间(即不会破坏应用程序)或者任何程序都不会用到的空间!
2004-08-06 13:15
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 
那 char *p="fffffffffffff";等等也不对了????

差点把你忘了...
2004-08-06 13:31
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 

从语法上说是对的!

这是在静态存储区分配的空间,亦即他是字符串常量.相当于const char *p="fffffffffffffff";

当然不同的编译器可能是不一样的!

如果要对指针有更多的了解,请参考林锐的<高质量c/c++程序设计>.

2004-08-06 13:38
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 
那为什么 int *p=77;不对,而char *p="fffffffffffff";就对那????

差点把你忘了...
2004-08-06 13:52
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 

我个人理解,非常明显任何我们程序员编的程序都要经过编译器的编译才能被机器执行(至少目前是这样),

char *p="fffffffffffff";是编译器的行为,即编译器要对字符串"fffffffffffff"分配存储空间;

而int *p=77;是我们程序编制者的行为,即人为的分配空间,

但是编译器为我们提供了分配内存空间和释放内存空间的函数

在c语言中为:malloc和free,在c++中为new和delete.

而编译器对char *p="fffffffffffff";的操作有定义,即编译器要对字符串"fffffffffffff"分配存储空间;

而int *p=77;虽然从语法上没有什么问题,但是却可能存在逻辑错误!

2004-08-06 14:07
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 

简单的说:

也就是我们不能乱用指针,实际上就是不能乱对内存空间操作,必须利用库函数,除非你能完完全全跟踪电脑的行为!

或者你是操作系统方面的高手或编译器方面的高手,直接修改操作系统或者编译器之后还没有任何副作用!

2004-08-06 14:12
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
得分:0 
这也就是为什么有人说指针好坏参半的原因!
2004-08-06 14:14
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

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

满脑子浆糊了!!!

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

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

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


差点把你忘了...
2004-08-06 14:56



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




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

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