指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽。比如JAVA,java是没有指针的,但是很多地方都用到指针,不过不对用户开放,语言的自身机制帮用户处理指针的分配释放,为的就是方便用户使用,减少错误。不过我们不能因噎废食,指针虽难,但学好了会大大提升你的编程能力。

下面来列举一下在学习过程中指针的常见错误。

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(i=0;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(i=0;i

    {

      p[i]=(char*)malloc(sizeof(char)*len));//len 字符个数

    }

错误原因:这是很网上多人的写法,也是很常见的一种错误,这里虽然给p分配了空间但是仅仅是分配了一个char*类型的空间,当size超过1的时候,就会出错。

正确写法:

    char**p;//定义一个二级指针来存放一系列字符串

    p=(char**)malloc(sizeof(char*)*size));//分配size个char*类型的内存空间

    for(i=0;i

    {

      p[i]=(char*)malloc(sizeof(char)*len));//len 字符个数

    }

5.释放空间

 C语言中用free来释放空间,一般用法是:

 free(p);//这里释放的是p指向的空间,存放p的内存空间没有被释放。

 p=NULL;//建议加上这句

 分配空间:

  char**p;//定义一个二级指针来存放一系列字符串

  p=(char**)malloc(sizeof(char*)*size));//分配size个char*类型的内存空间

  for(i=0;i

  {

    p[i]=(char*)malloc(sizeof(char)*len));//len 字符个数

  }

释放空间正确写法:

  for(i=0;i<size;i++)

    free(p[i]);

  free(p);

  p=NULL;

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言指针用得好犹如神助!这些使用技巧值得收藏相关推荐

  1. C语言指针这些使用技巧值得收藏!

    指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽.比如JAVA,java是没有指针的,但是很多地方都用到指针,不过不对用户开放,语言的自身机制帮 ...

  2. c语言代码先来先服务算法_C语言十大经典排序算法(动态演示+代码,值得收藏)...

    以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. 时间.空间复杂度比较 排序算法 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象 ...

  3. 精心为学弟学妹准备的C语言与C++学习路线、书籍、视频推荐和资料,值得收藏!

    C语言 有人说:"C生万物,编程之本",这一点都没有错! C语言是最接近计算机的语言,很多时间,我们都会发现,C语言是非常有必要学习的. 刚开始就是泡书,然后就是抄代码,上机调试, ...

  4. 导航编程用c语言还是c加加,C语言/C加加大神程序员老司机带你玩转C语言指针详解...

    很多初学编程的小伙伴都会选择C语言作为第一门学习的编程语言,因为C语言作为一门底层基础语言相对于其他的高层语言来说更加容易学习.可以来帮助正在学习编程的小伙伴更加快速的了解计算机原理. 但是初学C语言 ...

  5. 全国计算机二级考试c语言指针,全国计算机二级考试C语言 指针精讲课件.ppt

    全国计算机二级考试C语言 指针精讲课件 第七章:指 针;第一节:指针概述;如:执行以下说明语句后: int a=3,b=4; float c=4.5,d=8.6; char e='x',f='y';其 ...

  6. C语言指针变量--图示易懂

    1. 指针是什么 如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元,编译系统根据程序中定义的变量类型,分配一定长度的空间. 内存区的每一个字节有一个编号,这就是" ...

  7. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx

    c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...

  8. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  9. simple c语言,C语言——指针(simple).ppt

    C语言--指针(simple) 莆田学院计算机教研室 2003年5月 指 针 绍兴文理学院自动化教研室 2011年4月 本讲主要内容 指针概述 地址· 指针· 指针变量 指针变量作为函数参数 指针与数 ...

最新文章

  1. KDE 4.3.2 发布
  2. 关于oracle sql语句查询时表名和字段名要加双引号的问题
  3. 求5阶矩阵其对角线上所有元素之和
  4. python 示例_Python日历类| yeardatescalendar()方法与示例
  5. 数据库系统实训——实验四——视图
  6. 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)
  7. ip地址和MAC地址的捆绑
  8. empty怎么发音_empty是什么意思
  9. android数据适配器参数,Android 万能适配器BRVAH
  10. angular toastr插件
  11. python 探究is_dir函数及其使用案例(读取人脸图片)附整体代码
  12. Redis Stream
  13. 图论总结 for noip
  14. jieba结巴分词加入自定义词典
  15. 关于支付(支付宝和微信)
  16. python编程:从入门到实践(持续更新)
  17. CentOS升级openssl修复部分ssl漏洞
  18. EEGLAB直接读入Curry8软件采集的数据信号
  19. 如何从零打造爆款小程序
  20. 个人总结向-毕业设计开题报告格式

热门文章

  1. Java NIO教程
  2. js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能
  3. Java:使用Mockito模拟ResultSet
  4. Zuul 2 –样本过滤器
  5. JUnit 5扩展模型的生命周期
  6. 使用Hibernate和Spring设置分布式Infinispan缓存
  7. jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分
  8. Spring开发人员知道的一件事
  9. 适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...
  10. 学习Spring-Cloud –基础结构和配置