南宁本地有几家网站开发,资讯文章减肥健康wordpress,网页设计所需软件,制作网站策划书指针用的好犹如神助#xff0c;用不好会让你叫苦连连#xff0c;但大多数人是用不好指针的#xff0c;所以后来的很多语言都把指针封装#xff0c;屏蔽。比如JAVA#xff0c;java是没有指针的#xff0c;但是很多地方都用到指针#xff0c;不过不对用户开放#xff0c;… 指针用的好犹如神助用不好会让你叫苦连连但大多数人是用不好指针的所以后来的很多语言都把指针封装屏蔽。比如JAVAjava是没有指针的但是很多地方都用到指针不过不对用户开放语言的自身机制帮用户处理指针的分配释放为的就是方便用户使用减少错误。不过我们不能因噎废食指针虽难但学好了会大大提升你的编程能力。下面来列举一下在学习过程中指针的常见错误。1.指针和指针变量很多初学者没搞明白这两者的区别以至于很多时候把两者等同了。在C语言中指针是一个概念性的东西简单而言就是地址。而指针变量是变量类型属于int,float这类的,是用来存放指针的也就是地址。但是很多时候我们说指针时是代指指针变量的这点我们要知道。2.指针变量的地址和指针变量存放的地址凡是变量都要有内存来存放指针变量也不例外它也有一个地址但是指针变量本身又是存放地址的所以很多人会在这个地方搞不清楚分不清什么时候是指针变量的地址什么时候是指针变量存放的地址,尤其是在有二级指针或数组的时候。 3.没分配空间就给指针赋值这是初学者很容易犯的错误我们来看一个例子。 char*p;//定义一个指针来存放字符串 scanf(%s,p);//会出错此时的指针p是没有指向任何有效的空间看清楚是有效空间并非是没有指向内存空间定义的时候p就有值的了是一个随机值指向一个不明的内存空间但是不合法 的当你去访问的时候就会出错。正确的写法是char * p(char*)malloc(sizeof(char)*size);//size 你所需的内存大小。scanf(%s,p);//注意这里不能写成p,因为p本身就存放了地址不需再用取地址符了。4.用到二级指针来存放字符串时没有分配到空间我们常用字符串数组来存放一系列的字符串但是不能动态分配空间大小要事先指定这在很多时候是不行。所以我们要用到指针来存放这时候就很容易出错了。错误一char**p;//定义一个二级指针来存放一系列字符串for(i0;i{ p[i](char*)malloc(sizeof(char)*len));//len 字符个数}错误原因p是一个二级指针用来存放一系列char*变量但是我没有给p分配内存空间就直接用了。我只是给每一个p[i]分配了空间但是还需要存放p[i]地址的内存空间。也就是存放每一个字符串地址的内存空间还没有分配给p.错误二:char**p;//定义一个二级指针来存放一系列字符串 p(char**)malloc(sizeof(char*)); for(i0;i { p[i](char*)malloc(sizeof(char)*len));//len 字符个数 }错误原因这是很网上多人的写法也是很常见的一种错误这里虽然给p分配了空间但是仅仅是分配了一个char*类型的空间当size超过1的时候就会出错。正确写法 char**p;//定义一个二级指针来存放一系列字符串 p(char**)malloc(sizeof(char*)*size));//分配size个char*类型的内存空间 for(i0;i { p[i](char*)malloc(sizeof(char)*len));//len 字符个数 }5.释放空间 C语言中用free来释放空间一般用法是: free(p);//这里释放的是p指向的空间存放p的内存空间没有被释放。 pNULL;//建议加上这句 分配空间 char**p;//定义一个二级指针来存放一系列字符串 p(char**)malloc(sizeof(char*)*size));//分配size个char*类型的内存空间 for(i0;i { p[i](char*)malloc(sizeof(char)*len));//len 字符个数 }释放空间正确写法 for(i0;isize;i) free(p[i]); free(p); pNULL;声明本文于网络整理版权归原作者所有如来源信息有误或侵犯权益请联系我们删除或授权事宜。