浅谈C语言指针的四要素
学技术,重在日拱一卒、一点一滴的积累。
今天一起来分析C语言的指针应用时候要注意的四个要素。
为书写方便,本文用uchar代替unsigned char。
以下内容,只代表个人观点,不一定对,仅供参考,随便看看。
变量
在C语言程序运行中,其值可以改变的量称为变量。
一个变量主要由两部分构成:
一个是变量名,一个是变量值。
每个变量都有一个变量名,在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。
1.1、变量的定义
变量类型 变量名
uchar a;
说明:
定义一个字符型变量a,a的取值范围为0-255。
1.2、函数的定义
函数的声明形式为:
函数类型 函数名(数据类型 形式参数, 数据类型 形式参数, ……);
案例:char niu( int b, float c);
说明:niu为函数名,该函数为字符型函数,也就是该函数的返回值必须是char类型;b和c为函数的形式参数。
1.3、数组的定义
数组类型 数组变量名
uchar niu[3];
说明:定义一个字符型数组,数组名为niu,数组长度为3。
1.4、指针的定义
指针类型 指针名
uchar * sp;
说明:定义一个指针,指针名为sp,指针指向的类型为uchar。
指针四要素
指针是C语言中非常重要的一个知识点,需要多理解、多练习。
要用好指针,需要指针的四个要素:
1、指针的类型
2、指针指向的类型
指针实际应用时指向的类型,必须和指针定义时规定指向的类型保持一致。
3、指针的值
指针的值就是指针指向地址。
指针在使用之前,必须有固定的指向,否则就是野指针,会出现不可预知的错误。
4、指针本身占用的内存地址
案例1:
int *sp,x; char yx=3;sp=&x;
说明:
1、指针sp的类型为int*型;
2、指针sp指向的类型为int, 如果sp=&y;这是错误的,因为sp指针定义时规定指向的类型为int,而不是char。
3、指针sp指向x变量所在的内存地址,x的值为3,那么*sp的值也是3。
4、指针sp本身占用内存空间为4,C语言中,不管什么类型的指针,占用内存空间大小均为4。
5、如果在KEILC编译环境下,C51单片机中定义一个指针变量,占用3个字节的地址空间,ARM中定义一个指针变量,占用4个字节的地址空间。
案例2:
uchar **ss;uchar *sp, x; uchar niu[10]={3,6,7};sp=niu;ss=&sp;
说明:
第一行代码:指针ss的类型为int**型,定义一个二级指针变量,它指向一个指针变量(它存的也是一个变量地址,只不过是一个指针变量的地址);
第二行代码:定义sp是一个指针,x是一个字符型变量;
第三行代码:定义一个字符型数组niu;
第四行代码:将数组niu首地址送给sp;
第五行代码:将指针sp的地址送给ss,也就是ss指针指向的地址里面存放的是一级指针sp的地址。
在编译器确定的情况下:
uchar a,b,c,x,y,z;uchar *sp;short *ss;int *zz;a=sizeof(sp); //a的值为4 b=sizeof(ss); //b的值为4 c=sizeof(zz); //c的值为4 x=sizeof(*sp); //x的值为1y=sizeof(*ss); //y的值为2z=sizeof(*zz);//z的值为4
指针总结
3.1、指针的定义
如果uchar sp ,则sp为字符型变量;
如果uchar *sp,则sp为指向字符型数据的指针。
3.2、指针的使用
如果:
uchar a,b,c,d;
uchar *sp;
且指针如上图所示sp指向30H,
那么:
a=*sp; //a的值为8
b=*sp+1;//b的值为9
c=*sp++;//c的值为8,指针指向31H地址。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/96111.html