嵌入式C语言存储器及指针

嵌入式C语言存储器及指针

ID:46379610

大小:1.30 MB

页数:30页

时间:2019-11-23

嵌入式C语言存储器及指针_第1页
嵌入式C语言存储器及指针_第2页
嵌入式C语言存储器及指针_第3页
嵌入式C语言存储器及指针_第4页
嵌入式C语言存储器及指针_第5页
资源描述:

《嵌入式C语言存储器及指针》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式C语言编程——存储器及指针GDAIBMemoryandPointers目录指针与数组(Pointersandarrays)函数指针(Functionpointers)内存陷阱(Memorypitfalls)栈(Stacks)Page2指针与数组C语言中只支持一维数组,且只支持静态数组。数组的大小在编译的时候就必须作为一常数确定下来。虽然C的数组只有一维,但是它的数组元素可以是任何数据类型的对象,因此一个数组的元素也可以是另外一个数组,这样就可以模拟出多维数组。有关数组的操作即使是通过数组下标进行运算的,实际上都是通过指针进行的。Page3多维数组int

2、calendar[12][31];int*p;inti;p=calendar[4];i=calendar[4][7];i=*(calendar[4]+7);i=*(*(calendar+4)+7);看左边的几个声明,请思考:Calendar[4]是什么意思?Page4数组名与指针inta[10];int*p;……p=a;a++;p++;printf(“Thesizeofais%d”,sizeof(a));printf(“Thesizeofpis%d”,sizeof(p));……/*语法错误!a是常量!*//*语法正确!p是变量!*//*对于大多数32

3、位系统,输出的结果是40*//*输出的结果是4*/请指出下列代码中的错误及输出结果?Page5数组作为函数的入口参数charb[10]=“123456789”;main(){……f(b);……}voidf(chara[]){charc;……a++;c=a[0];printf(“Thesizeofais%d”,sizeof(a));printf(“Thesizeofbis%d”,sizeof(b));……}voidf(char*a){...}/*a是指针,输出的结果是4*//*形参看起来是数组,实际已退化为指针*//*a是指针,因此自增运算是合法的!*

4、//*a通过下标可以看起来像数组,但是它不是数组,而且此时c的值应该是”2”而不是”1”因为前面a做了自增运算*//*b是数组,输出的结果是10*//*真正传入f函数的是数组b的首地址指针*/请分析这个程序?Page6字符串数组与指向字符串的指针……char*p=“helloworld!”;chara[]=“helloworld!”;p[0]=‘H’;a[0]=‘H’;p=a;……在很多编译器中可能是非法的,因为p所指向的串可能存放在只读的存储空间,比如ROM或FlashP重新指向a,但p原来指向的串将永远丢失,因为不知道原来那个串存放内存的地方Page7指

5、出左边的程序段有何不妥?指针与数组(Pointersandarrays)函数指针(Functionpointers)内存陷阱(Memorypitfalls)栈(Stacks)Page8目录函数指针定义int(*fp)(int);int*fp(int);int*(*fp_array[10])(int);int**fp_array[10](int);声明一个函数指针变量fp,它指向一个入口参数与返回值都是整数的函数声明一个函数fp(),该函数有一个整数参数,并且返回一个指向整数的指针声明一个函数指针数组,它的每个元素都指向一个入口为整数且返回在值也为整数指针的函

6、数从运算符的结合性来看,为是一个函数数组,但C中没有这个概念,故这个声明有语错误!Page9int*myfunction(int);int*(*fp)(int);int*ptr;fp=myfunction;ptr=(*fp)(3);ptr=fp(3);函数指针调用/*为fp赋初值,使它指向函数myfunction*//*通过函数指针调用函数,与myfunction(3)的效果一样*//*这也是通过函数指针调用函数,与myfunction(3)的效果一样*/Page10多态(Polymorphism)指用一个名字定义不同的函数,这些函数不同但操作类似,从而实现

7、“一个接口,多种方法”回调(Call_Back)指操作系统来调用用户编写的函数,或由底层函数调用上层函数多线程(Multithreading)操作系统按一定的条件请允许多任务调度,则调用调度器选择合适的任务进行运行。函数指针的作用Page11指针与数组(Pointersandarrays)函数指针(Functionpointers)内存陷阱(Memorypitfalls)栈(Stacks)Page12目录程序内存映像布局1.静态映像(可执行文件):TEXT段、DATA段、BSS段;2.动态映像(可执行文件运行):BSS段消失增加堆和栈Page131.TEXT

8、:保存指令代码、立即数等只读信息,函数地址就在该段中

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

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

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