C语言/C++学习之C语言指针使用技巧
小职 2021-01-14 来源 : 阅读 718 评论 0

摘要:本文主要向大家介绍了C语言/C++学习之C语言指针使用技巧,通过具体的内容向大家展现,希望对大家C语言/C++的学习有所帮助。

本文主要向大家介绍了C语言/C++学习之C语言指针使用技巧,通过具体的内容向大家展现,希望对大家C语言/C++的学习有所帮助。

C语言/C++学习之C语言指针使用技巧

C语言的学习过程中,作为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<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;//建议加上这句


分配空间:

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;



关注“职坐标在线”(Zhizuobiao_Online)公众号,免费获取学习教程资料、技术就业咨询

C语言/C++学习之C语言指针使用技巧

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程