美文网首页
C语言指针一些常见的错误用法

C语言指针一些常见的错误用法

作者: 诸葛青云999 | 来源:发表于2020-03-10 11:09 被阅读0次

指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽。比如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<size;i++)//size 字符串的个数

    {

      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<size;i++)//size 字符串的个数

    {

      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<size;i++)//size 字符串的个数

    {

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

    }

5.释放空间

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

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

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

想要成为一个优秀的、有能力程序员,做软件开发的话,就来学习C/C++吧,而且学习编程的话有一个学习的氛围跟交流圈子特别重要!这里我推荐一个C语言C++交流扣裙,--先八七零九;后63251,不管你是大牛还是小白,大家都一起成长进步。

 分配空间:

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

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

    for(i=0;i<size;i++)//size 字符串的个数

    {

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

    }

释放空间正确写法:

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

      free(p[i]);

    free(p);

    p=NULL;

相关文章

  • C语言指针一些常见的错误用法

    指针用的好犹如神助,用不好会让你叫苦连连,但大多数人是用不好指针的,所以后来的很多语言都把指针封装,屏蔽。比如JA...

  • C语言学习(第一天)

    C语言基本数据类型 输入和输出函数 指针入门 C语言指针实现数据交换 指针的常见错误 不可以使用已经被回收的变量 ...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C 语言常见的内存坑

    C 语言常见的内存错误类型 提起 C 语言,大家可能会第一个想到指针,接着可能会想起与内存有关的错误。我们就利用这...

  • C语言- 指针用法

    如何表示地址? 地址是整数,是否可以用int?理论上可以,但是为了强调它是个内存地址,提出一些新的类型: 上面的指...

  • go语言指针类型的使用

    go语言的指针类型 简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增...

  • 2-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 前面我们对于: c语言的基本用法 makeFile文件的使用 main函数的详解 标...

  • Swift4基本运算

    只列出与Swift和C语言不一样用法或者一些在C中不常见的用法 元组赋值 不同于C和Objective-C在,Sw...

  • 《C和指针》——C语言补漏(基本用法篇)

    title: "《C和指针》——C语言补漏(基本用法篇)"date: 2014-05-14 19:06:57cat...

  • Go语言 值,指针,引用类型

    Go语言的指针与C或C++的指针类似,但是Go语言的指针不支持指针运算,这样就消除了在C或C++程序中一些潜在的问...

网友评论

      本文标题:C语言指针一些常见的错误用法

      本文链接:https://www.haomeiwen.com/subject/staidhtx.html