附录一再论指针和数组_第1页
附录一再论指针和数组_第2页
附录一再论指针和数组_第3页
附录一再论指针和数组_第4页
附录一再论指针和数组_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

附录再论指针和嵌入式家园 嵌入式家园-开发板商 嵌入式嵌入式家园-开发板商 本章概 本章目 重 难 嵌入式嵌入式家园-开发板商 再论指针再论指针和嵌入式嵌入式家园-开发板商 再论指针和数嵌入式嵌入式家园-开发板商 指针与数组的不 嵌入式嵌入式家园-开发板商 数组和指针是如 externint*x;- externint 在这个上下文环境在这个上下文环境里这被称为左值这被称为右值左值在编译时可知如无特别说明,右值左值表 结果地方嵌入式家园-开发板商 数组和指针是如 数组下标特点数组:chara[9]=“abedefgh”;运行运行取i的值,将它与9980取地址(9980+i)的内容…编译器符号表具有一个地址嵌入式嵌入式家园-开发板商 数 指针数指 特例指针:char运行运行取地址4624的内容,就是取地址5081的内容50815081编译器符号表有一个符号p 嵌入式家园开发板商开发数 指针数数 指针特 例数组:chara[9]=“abedefgh”;运行运行取地址4624的内容,即‘5081’取得i的值,并将它与5081相加取地址[508l+i]的内容50815081…编译器符号表有一个符号p嵌入式家园开发板商址4t://em 数 指针数指 特char chara[]=”abcdefgh”; 特 嵌入式嵌入式家园-开发板商 数组和指针的其他保存数据保存间接数据,首先取得指针的内直 数据,a[I]只是简单地以a*1为地址取通常用于动态数据通常用于固定数目且数据类型相同的元素相关的函数为malloc(),free()隐式分配自身即为通常指 数 嵌入式嵌入式家园-开发板商 指针与数组的嵌入式嵌入式家园-开发板商 什么时候指针与数组外部数组(externalarray)的使用数组时,数组可以写成指针,可以互换嵌入式嵌入式家园-开发板商 什么时候指针与数组嵌入式嵌入式家园-开发板商 数组和指 的原charmy_array[10]char*my_ptr;j=strlen(my_array);J=strlen(my_ptr);printf(”%s嵌入式嵌入式家园-开发板商 数组和指 的原 嵌入式嵌入式家园-开发板商 数组和指针嵌入式嵌入式家园-开发板商 “表达式中的数组名”就是 数组下标整型数的长度是4个字节,那么a[i+1]和a[i]在内存中的距离就是4(而不是 Inti=2数组第i个元素p=a;

p=

p=嵌入嵌入式家园开发板嵌入嵌入式家园开发板商城开发板商“表达式中的数组名”就是数组 不能用指向该数组第一个元素的指针规嵌入式嵌入式家园-开发板商 把[R2]装入把[R2]装入数 模式分把左把左值(i)装入R2(可以提到循环外把把左值(a)装入Rl(可以提到循环外的的结果装入R4到把如果需要到把如果需要,对R3的步长进行调ttp:/t 嵌入式家园-开发ttp:/t t C数 模式分把把左值(p)装入R0(可以提到循环外把把[R0]装入Rl(可以提到循环外把把R1+R3的结果装入R4如果需要,对R3的步如果需要,对R3的步长进行把[R2]装入把左值(i)装入R2(可以提到循环外嵌入式家园-开发板

把 到[R4]/数 模式分把把左值(p)装入R0(可以提到循环外把把[R0]装入Rl(可以提到循环外把把R1+R3的结果装入R4如果需要,对R3的步如果需要,对R3的步长进行把[R2]装入把左值(i)装入R2(可以提到循环外嵌入式家园-开发板

把 到[R4]/数 模式分把把P所指对象的大小装入(可以提到循环外把把左值(p)装入Rl(可以提到循环外把把[R0]装入把把R5+R1把把R5+R1的结果装入把嵌入式嵌入式家园-开发板

到/为什么C语言把数组形参当作函数参数嵌入式嵌入式家园-开发板商 1.2.4为什么C语言把数组形参当作嵌入式嵌入式家园-开发板商 1.2.4为什么C语言把数组形参当作 Func(char Func(char 嵌入式嵌入式家园-开发板商 为什么C语言把数组形参当作数组,指针实参的一般调用时的实通常目一个整型数的地一个int参数的传址调指向整型数的指传递一个指整型数传递一个数一个整型数组某个元素的地传递数组的一部嵌入式嵌入式家园-开发板商 嵌入式家园-开发板商 怎样使用数 嵌入式嵌入式家园-开发板商 数 嵌入式嵌入式家园-开发板商 数组 与a[I,j,k]一个10×20 字符数char或 typedefchar 嵌入式嵌入式家园-开发板商 数组的内存

…嵌入 嵌入式家园-开发板商 如何分 数intapricot[2][3][5]sizeof(apricot)区域嵌入式嵌入式家园-开发板商 如何对数组进行初 short{10,12,3,4,一{31,22,6,0,-int嵌入式嵌入式家园-开发板商 1.3.1.4如何对数组进行初 charvegetables[][9]

char 嵌“crispyfriedpatatoes”嵌嵌入式家园开发板城

int 1.3.1.4如何对数组进行初 introw_1[]={1,2,3,4,5,-1};/*一1是行结束标志introw_2[]={6,7,-int*weight[]={嵌入式家园 嵌入式家园-开发板商 向函数传递一 数方法模式:my_function(int作用最小inta[3][3]{{1,1,{2,2,{3,3,函数定嵌}

{函数调向函数传递一 数方法模式:my_function(intmy_array[][20;方法3(指针传递模式模式:my_function(charinta[3][3]{{1,1,{2,2,{3,3,

{函数//函数定 **rr嵌}从函数返回一个{ 一个指向包含20个int元素的数组的指针;return}嵌入式家园-开发板商 嵌入式嵌入式家园-开发板商 指针运什么是间嵌入式嵌入式家园-开发板商 间 Intmain(){intint*p;i=5;p=& /*now*p==i*/*%PisdescribedinFAQVII.28*/printf("i=%d,p=%P, *p=%d\n",i,P,*p);*p=6; /*sameasi=6*/printf("i=%d,p=%P, *p=%d\n",i,P,*P);return0; /*seeFAQXVI.4*/}}嵌入式家园-开发板商 inti=int*ip0l=int**ip02=&ip01;int***ip03=&ip02;int****ip04=&dp03;int*****ip05=&ip04; 不要

******ip06= *******ip07=嵌入式嵌入式家园-开发板商 /*Wouldrunforeverifyoudidn'tlimitittoMAX*/#include<stdio.h>struct{ value[3];structcirc_list *next;struct suffixes[]="th",&.suffixes[1],/*Oth*/"st",&.suffixes[2],/*1st*/

#defineMAX20{inti=0;while(i{

*p="nd",&suffixes[3],/*2nd*/"rd",&suffixes[4],/*3rd*/"th",&.suffixes[5],/*4th*/"th",&.suffixes[6],/*5th*/"th",&suffixes[7],/*6th*/"th",&suffixes[8],/*7th*/"th",&suffixes[9],/*8th*/"th",&suffixes[0],/*9th*/};

printf("%ds%\n",i,p-+p=p-}} void指针与空NULL总是被定义为0嵌入式嵌入式家园-开发板商 空指 嵌入式嵌入式家园-开发板商 空指针的用嵌入式嵌入式家园-开发板商 什么是voidchar*strepy(char‘strl,constcharchar*strncpy(char*strl,constchar*str2,size_tn);void*memcpy(void*addrl,void*addr2,size_tn);嵌入式嵌入式家园-开发板商 NULL总是被定义为0NULLif(/*...{}{}

/*...*/嵌入式嵌入式家园-开发板商 指针运嵌入式嵌入式家园-开发板商 如果两个指针向同一个数组,它们就可以相减,其为如果两个指针不是指向一个数组,它们相减就没有意嵌入式嵌入式家园-开发板商 1.4.4.1指针的相减运#include<stdio.h>#include<stddef.h>structstuff{

main({

*p0=*p8=&-array[8];diff=p8-p0;addr.diff=(char*)p8-(char*)structstuffarray[]{{"The"},{"quick"{"brown"},{"fox"{"jumped"},{"over"{"the"},{"lazy"{"dog."},{""嵌入式家

printf("&array[0]=p0=%P\n",(void*)p0);printf("&.array[8]=p8=%P\n",(void*)p8);printf("Thedifferenceofpointersis%ld\n",(long)diff);printf("Thedifferenceofaddressesis%ld\n",(long)printf("p8-8=%P\n",(void*)(p8-8));printf("p0+8=%P(sameasp8)\n",(void*)(p0+8));return0; /*seeFAQXVI.4*/嵌入式家园-开发板商 当把一个整型值加到一个指针上后,该指针指向的位嵌入式嵌入式家园-开发板商 两个指针可以相p=(p+p2)-p+=p2-嵌入式嵌入式家园-开发板商 函数指针和指针嵌入式嵌入式家园-开发板商 指针函定义嵌入式嵌入式家园-开发板商 指针函例子float*find();{staticfloatinti,m;printf("Enterthenumbertobefound:");printf("thescoreofNO.%dare:\n",m);

函数定义/*定义指针函数{float*pt;}}嵌入式嵌入式家园-开发板商 函数指定义指向函数的嵌入式嵌入式家园-开发板商 函数指例子 函数定义void{inta,b,c;

/*定义函数intmax(intx,int{}}嵌入式嵌入式家园-开发板商 函数指针的用定义函数指针定义一个原型为intFun(inta的函数指针typedefint(*PTRFUN)(intaPara);函数指针变量的PTRFUN pFunint(*pFun2)inta 嵌入式嵌入式家园-开发板商 intintCallBack(inta){return++a;}voidCaller(PTRFUNcbvoi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论