嵌入式C编程01指针的使用

嵌入式C编程01指针的使用

ID:37410581

大小:1.22 MB

页数:36页

时间:2019-05-12

嵌入式C编程01指针的使用_第1页
嵌入式C编程01指针的使用_第2页
嵌入式C编程01指针的使用_第3页
嵌入式C编程01指针的使用_第4页
嵌入式C编程01指针的使用_第5页
资源描述:

《嵌入式C编程01指针的使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、指针的使用课程安排n指针的概念n指针数据类型n指针与其他数据类型n指针修饰符内存与地址一般的32位CPU都有硬件MMU单元,能将有限的硬件内存(如512M)虚拟成一个较大(如2G)的虚拟内存这样软件可以在一个非常大的范围里使用内存每个内存单元(8bits组成一个内存单元byte)都有一个地址地址是一个无符号的整数表示,通常与CPU字长相等(在32位CPU上就是4byte的空间)变量与地址1、变量是对程序中数据存储空间(地址和值)的抽象intnum=100;printf(“numis%d,numaddris%p”,num,&num);2、可以将变量的地址保存在一个整型变量中

2、unsignedintaddr=0;addr=#printf(“addris%#x”,addr);3、问题是,怎么通过addr简接获取该地址内保存的值(100)?指针的由来1、C定义了一种专门用于表示地址的变量—指针int*addr;//定义指针变量2、将内存中数据的地址赋值给指针变量:表示将指针指向该数据addr=#//指针变量addr指向num变量3、通过指针变量可以间接访问被指向的数据printf(“numis%d”,*addr);//通过addr获取num*addr=200;//通过addr修改numprintf(“numis%d”,num

3、);指针是把双刃剑用好指针可以:•使程序简洁、紧凑、高效•有效地表示复杂的数据结构•动态分配内存•得到多于一个的函数返回值•直接操作地址造就了C/C++的强大用不好指针造成:•非法内存访问,程序死机或异常•内存泄露,减低系统性能•指针属于间接访问,指来指去最终变得不可维护课程安排n指针的概念n指针数据类型n指针与其他数据类型n指针修饰符指针的定义实例:int*pi;char*pc;double*pd;info_t*pinfo;staticint*pi;staticchar*pc;staticinfo_t*pinfo;关键概念:1、指针类型与指针指向对象类型2、指针的值与指针指

4、向对象的值指针内存大小指针变量用来表示内存地址,32位CPU上用4byte空间表示地址int*pi;char*pc;double*pd;info_t*pinfo;sizeof(pi)=?sizeof(pc)=?sizeof(pd)=?sizeof(pinfo)=?指针初始化与赋值1、初始化为指向对象的地址intnum=100;intpaddr=#//paddr指向num2、初始化为空指针int*paddr=NULL;//NULL为0,表示空地址3、指针变量定义后可以随时改变所指向的变量intnum1=100,num2=200;intpaddr=NULL;paddr=&

5、num1;paddr=&num2;指针运算1、取值运算符intnum=100;int*paddr=#通过paddr间接取num值:*paddr2、取址运算符&paddr=?:表示paddr这个指针变量的地址3、加减运算:偏移指针类型字节数paddr+1=?paddr++?paddr–1=?paddr--?4、强制转换intnum=100;char*paddr=#*paddr=?paddr+1=?*(int*)paddr=?(int*)paddr+1=?通用(void)指针指针变量的类型表示指针所指向对象的类型能不能定义一种通用指针,将来根据需要再指向特定对象?

6、void*point=NULL;//void指针,定义不指定指针指向哪种类型数据sizeof(point)=?point++?point--?使用时需要进行强制类型转换:intnum=100;charch=‘a’;void*point=NULL;point=#printf(“numis%d”,*(int*)point);point=&ch;printf(“chis%c”,*(char*)ch);课程安排n指针的概念n指针数据类型n指针与其他数据类型n指针修饰符数组与指针1、数组与指针的关系l数组名表示数组首地址,可以把数组名可作指针常量intarr[3]={1

7、,2,3};int*p=arr;p++?arr++?*p=?*(p+1)=?*(p+2)=?l数组下标操作符内部实现机制:通过指针取值运算符实现arr[2]相当于*(arr+2)l数组作为函数参数,实际是转化为指针实现str_cpy(charsrc[],chardes[])=>str_cpy(char*src,char*des)l数组作为函数返回值,必须通过指针实现char*str_cpy(char*src,char*des)数组与指针2、指针数组:即数组的元素为指针类型。char*var[10];//

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。