dw php网站开发书籍云盘,wordpress模板汉化,定制app开发软件,ppt模板免费网页该楼层疑似违规已被系统折叠 隐藏此楼查看此楼作者#xff1a;吕老师,华清远见嵌入式学院讲师。大家都知道指针的学习对于c语言学习来说可谓是至关重要的#xff0c;下面我们来说一下在指针中两种比较特殊的关于指针的概念#xff0c;野指针和空指针。首先说一下空指针。voi…该楼层疑似违规已被系统折叠 隐藏此楼查看此楼作者吕老师,华清远见嵌入式学院讲师。大家都知道指针的学习对于c语言学习来说可谓是至关重要的下面我们来说一下在指针中两种比较特殊的关于指针的概念野指针和空指针。首先说一下空指针。void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来。还有\0,这也不是空指针所指的内容. \0是表示一个字符串的结尾而已,并不是NULL的意思。真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:char* k;这里这个k就叫空指针.我们并未让它指向任意地点。又或者char* k NULL;这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是\0。一个空指针我们也无法对它进行取内容操作这是初学者很容易犯得一个错误空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容。也就是说要这样k hello world!;这时k指向一个字符串常亮就不是空指针了。再来说一下野指针。“野指针”不是NULL指针是指向“垃圾”内存的指针。人们一般不会错用NULL指针因为用if语句很容易判断。但是“野指针”是很危险的if语句对它不起作用。“野指针”的成因主要有两种(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针它的缺省值是随机的它会乱指一气。所以指针变量在创建的同时应当被初始化要么将指针设置为NULL要么让它指向合法的内存。例如char *p NULL;char *str (char *) malloc(100);(2)指针p被free或者delete之后没有置为NULL让人误以为p是个合法的指针。free和delete只是把指针所指的内存给释放掉但并没有把指针本身干掉。指针p被free以后其地址仍然不变(非NULL)只是该地址对应的内存是垃圾p成了“野指针”。如果此时不把p设置为NULL会让人误以为p是个合法的指针。如果程序比较长我们有时记不住p所指的内存是否已经被释放在继续使用p之前通常会用语句if (p ! NULL)进行防错处理。很遗憾此时if语句起不到防错作用因为即便p不是NULL指针它也不指向合法的内存块。char *p (char *) malloc(100);strcpy(p, “hello”);free(p); // p 所指的内存被释放但是p所指的地址仍然不变…if(p ! NULL) // 没有起到防错作用{strcpy(p, “world”); // 出错}p成为野指针(3)指针操作超越了变量的作用范围。这种情况让人防不胜防示例程序如下class A{public:void Func(void){ cout “Func of class A” endl; }};void Test(void){A *p;{A a;p a; // 注意 a 的生命期}p-Func(); // p是“野指针”}函数Test在执行语句p-Func()时对象a已经消失而p是指向a的所以p就成了“野指针”。希望今天讨论的这两点关于指针的话题能对刚刚学习指针的同学有一定的帮助。