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

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

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;

声明:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言深度剖析PDF是一本面向C语言程序员的深入学习和理解C语言的电子书籍。该书通过系统性的剖析C语言的各个方面,帮助读者更加全面地了解和掌握C语言的原理和使用技巧。 首先,该书从C语言的历史背景和发展概况开始,介绍了C语言的起源和演化过程,让读者对C语言的产生和发展有一个整体的了解。接着,书中详细介绍了C语言的基本语法和结构,包括数据类型、变量、运算符、流程控制等方面,让读者对C语言的基本要素有一个清晰的认识。 除了基础知识,该书还对C语言的高级特性进行了深入剖析。比如,函数指针内存管理指针操作、结构体和共用体等高级特性在书中都得到了重点讲解。通过对这些特性的深入学习,读者可以更加灵活地运用C语言进行编程,提高代码的效率和可读性。 此外,该书还对C语言的一些常见问题和陷阱进行了详细解答。例如,内存泄漏、数组越界、函数调用和递归等问题和技巧都在书中得到了详细阐述。这些内容对于提高代码质量和调试技巧都是非常有益的。 总之,C语言深度剖析PDF通过全面、详细的介绍和分析,帮助读者更好地理解和掌握C语言使用技巧和原理。对于正在学习C语言或者希望提升自己在C语言领域的专业水平的人来说,这本书是一本难得的参考书籍,值得一读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值