一个二级指针引发的问题

来源:互联网 发布:js 获取点击对象的id 编辑:程序博客网 时间:2024/05/21 17:22

二级指针也就是指向指针的指针。如:char **p = NULL;。p就是一个二级指针——它是一个指向char *类型变量的指针。

我们来看下面这个小例子,它对吗。

就这短短几行代码,大家一般都会看出有问题,但是代码量一长,难免犯晕,我就晕过一次,不知道你晕过没。没有看出有问题,也不要紧,让过来人告诉你:

问题出在代码的第三行,我们虽然定义了二级指针p,它也的确指向一个char *类型变量[也即*p是char *类型的],那么是不是我们就可以用*p来保存一个字符的地址呢?答案是否定的,因为我们没有为*p分配一个存储char *类型变量的内存空间,就是说p指向一个不存在的地方或者说指向一个不明不白的地方,是野指针,这是很危险的。

所以上面代码我们应该改成这样的

指针是高效的,同时指针也是危险的,一旦由于误用指针而引发的错误是很难发现的,一般编译阶段是查找不到的,运行时才表现出来。而指针的所引发的错误的另一个特点儿是,引发错误发生的地方与表现出错误的地方往往不在一起,所以很难排查。想同时正确而高效的利用指针,就要采用正确的编程规范[如指针在定义时一定要初始化],多实践,多积累。