欢迎来到天天文库
浏览记录
ID:46379610
大小:1.30 MB
页数:30页
时间:2019-11-23
《嵌入式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、:保存指令代码、立即数等只读信息,函数地址就在该段中
此文档下载收益归作者所有