由于该楼层涉嫌违规,系统将其折叠并隐藏,以显示该楼层
作者:甜美的衬衫,华清远见嵌入式学院讲师。
大家都知道指针的学习对c语言学习非常重要,让我们来讨论指针中两个比较特殊的指针的相关概念,野指针和空指针。
首先说一下空指针。 void*这不称为空指针,而是称为无精确类型的指针。 这个指针指向一个内存,但没有告诉程序应该如何解释这个内存。 因此,此类型的指针不能直接执行获取内容的操作。 要解释内容,必须先将其转换为其他类型的指针。 另外,还有“ ”。 这也不是空指针指向的内容。 “ ”只是字符串的结束,不是空的意思。 真正的空指针是指这个指针不指向有意义的内存,例如:
char* k;
这个k被称为空指针。 我们没有把那个指向任意地方。 或者
char * k=空;
此处,k也称为空指针,因为它指向空值或0。 请注意,整数0而不是“ ”。 空指针也不能进行获取内容的操作。 这是初学者容易犯的错误。 只有当空指针指向真正有意义的内存时,才能检索内容。 也就是说必须这样做
k='hello world!' ;
此时,如果字符串总是亮的,则k不是空指针。
谈谈野生指南吧。 “野指针”不是空指针,而是指向“垃圾”存储器的指针。 人们不会错误地使用空指针。 因为用if语句很容易判断。 但是,“野针”很危险,if语句对它不起作用。
“野针”的原因主要有两种:
)1)指针变量未初始化。 创建指针变量后,它不会立即自动成为空指针。 默认值是随机的,会很混乱。 因此,指针变量必须在创建的同时初始化。 必须将指针设置为NULL或指向有效内存。 例如
char *p=NULL;
char*str=(char* ) malloc ) 100;
)指针p被free或delete后,未被设置为NULL,并且p被误认为是合法的指针。
free和delete只是释放了指针指向的内存,并没有杀死指针本身。 即使指针p被free,该地址也不变(不是空),但是对应于该地址的存储器是垃圾,只是p成为“野点”。 如果此时不将p设定为NULL,p会被误认为是合法的指针。
如果程序很长,则可能无法记住p所指的内存是否已释放。 在继续使用p之前,通常使用语句if(p ) (=NULL )进行错误防止处理。 很遗憾,此时if语句不能起到防止错误的作用。 因为即使p不是空指针,也不会指向合法的内存块。
char*p=(char* ) malloc ) 100;
srcpy(p,“hello”
free(p; //p指向的内存被释放,但p指向的地址不变
.
if(p!=null(//没有起到防止误动作的作用
{
srcpy(p,“world”); //错误
}
p会变成野针
)3)指针操作超出了变量的作用范围。 这是防不胜防的。 示例程序如下。
class A
{
公共:
voidfunc(void ) { cout“funcofclassa”endl; }
(;
语音测试(void ) )。
{
A *p;
{
a;
p=a; 注意//A的生命周期
}
p-Func (; //p为“野针”
}
函数Test是语句p-Func ) )时,对象a消失了,但p是“野指针”,因为p指向a。
希望今天讨论的关于这两点指南的话题对刚学习指南的同学有帮助。