指标变数的定义及初始值设定_第1页
指标变数的定义及初始值设定_第2页
指标变数的定义及初始值设定_第3页
指标变数的定义及初始值设定_第4页
指标变数的定义及初始值设定_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、Class:SeatNo:WMI题研究堂-指檄(Pointer)3NAME :SchoolID :(也就是指向整数的指襟)燮数count 宣告int 型别,它不是一偃I指向int的指襟。在造偃I宣告中,*只曾作用在指檄建数的定羲及初始值避:定【定羲】:指襟是代表言己位址的建数。【比较】通常一偃I建数都曾存放某偃I特定的数值。而指襟所存放的郤是某偃I建数的位址。【宣告】:int*countPtr,count;【意却:指定建数countPtr的型月俱int*【副乍】:countPtr是指向int的指襟countPtr。H*用於宣告中畤,表示此建数是要宣告卷指襟。指襟可以定羲成指向任何型别的物件。【

2、眼U:如果要符xPtr和yPtr宣告成int指惧如何嘉呢?【注意】:5青;悬指定初始值,以避免非期的结果崖生。指檄建算子(一)&:算元-取址:算元(addressoperator)是一偃I曾傅回建算元位址的一元建算子。聚例来我仲导宣告建数如下:指定算式轨行彳爰言己惊醴内的表示圈inty=5;int*yPtr;以下的叙述式yPtr=&y;曾符建数y的位址指定系台指檄建数yPtr。适畤,建数yPtr就可以它指向y(二)*建算子*算子通常戳接算子(indirectionoperator)或反参照算子(dereferencingoperator),它H傅回其算元(即指襟)所指向的物件的数值。例如,下面

3、的叙述式printf(%d,*yPtr);符曾印出建数y的值,也就是5。MW:inta;int*aPtr;a=7;aPtr=&a;冏:结果如何?printf(%d,*aPtr);指檄建算式和指檄的算彳舟!算假列intv5;已定囊以它的第一元素在言己意It中的位置卷3000。假割国票vPtr定成指向v0,亦即vPtr的值;3000。我伸号可以用下雨偃I叙述式之一,vPtrtg定成指向障列v。vPtr=v;vPtr=&v0;在傅统的算秫算正3000+2可得到3002。但却倒f算秫诞算(pointerarithmetic)而言,郤通常不是向用耒子常某偃I指襟要加上或减去某他整数畤,指襟或i不只是加上

4、或减去造低整数值而已,而是加上或减适偃I整数乘以指襟所指向之物件的大小。需要加减的数目取决於物件的资料型别。例如,下面的叙述式(i)vPtr的值卷何?.IM:vPtr+=2;之彳爰,【假:整数(int)HIK占4偃I位元(bytes)(2)vPtr指向障列那一偃I元素?假vPtr已遮增成3016,亦即指向v4,即以下的叙述式vPtr -=4;(1)vPtr的值;何?【假:整数(int)HIK占4偃I位元 (bytes)(2)vPtr指向障列那一偃I元素?指檄典障列的信副系C的指襟舆障列信期系非常密切,而且他伸号雨偃乎都可以交换使用。障列的名耦可想成是一偃I常数指襟。我伸号可以用指襟(Point

5、ers)来迤行任何的障列注襟(arraysubscripting)SM乍。假整数障列b5和整数指襟常数bPtr宣告如下:intb5;int*bPtr;bPtr=b;/bPtr指定卷弹列b的第一偃I元素的位址。障列名if(不具)是一偃I指向障列第一偃I元素的指襟道偃I叙述式典取得障列中的第一偃I元素的位址是相同的,我伸用务它表示如下:bPtr=&b0;(1) .b3元素的值可嘉成指襟形i1的*(bPtr+3)其中3是指造偃I指襟!始算起的位移值(offset)(2) .位址&b3可以嘉成以下的指搐!算式bPtr+3(3) .算式*(b+3)也曾参照元素b3o一般而言,所以注襟式的障列建算式,都可

6、以改K成指襟典位移的形式,而且以障列名耦来常作指襟。不谩,在任何情沆下,你都不可以更改上述叙述式中的障列名if;b依然指向障列的第一偃I元素。指襟也可以如障列般地使用表示法。例如,如果bPtr的值是b,bPtr1参照了障列元素b1o道檬的表示法耦卷指襟/注襟表示法(pointer/subscriptnotation)。言青不要忘言己障列名iOT除上是他常数指襟,它曾一直指向障列的HMI。因此下列的建算式b+=3是不合法的,因;它鲁以指襟算彳桁1算来更改障列名耦的值。傅址呼叫CallingFunctions傅遮引数女合函式僖值呼叫(pass-by-value)和傅址呼叫(pass-by-refe

7、rence)。CII言中所有的引数都是以值来迤行停遮。在C中,程式tgtH市曾利用指襟和接建算子来模擦傅址呼叫的勤作。若傅女合某偃I函式的引要更改的方舌,即傅遮此引数的位址女合函式。道可以在欲更改的建数之前加上&来加以逵成。swap(&arrayj,&arrayj+1);富僖遮燮数的位址女台函式畤,函式可以利用接建算子(*)来更改位於呼叫者言己意it内的数值。例:voidswap(int*element1Ptr,int*element2Ptr)inthold=*elementIPtr;* elementIPtr=*element2Ptr;* element2Ptr=hold;使用傅址呼叫的氟泡

8、排序法常你在停遮一偃I障列女合某函式畤,言青矜必符此障列的大小一起停迤去。道可以使你的函式更一般化。一般化的函式通常可在静多程式狸重禊使用。1/*Fig.7.15:fig07_15.c*/4 #include5 #defineSIZE1067 voidbubbleSort(int*constarray,constintsize);89 intmain()10 1112 intaSIZE=2,6,4,8,10,12,89,68,45,37;14 inti;16 printf(Dataitemsinoriginalordern);19 for(i=0;iSIZE;i+)20 printf(%4d,

9、ai);21 23bubbleSort(a,SIZE);/*sortthearray*/2425printf(nDataitemsinascendingordern);262728for(i=0;iSIZE;i+)29printf(%4d,ai);3032printf(n);34return0;363839 voidbubbleSort(int*constarray,constintsize)40 41 voidswap(int*element1Ptr,int*element2Ptr);42 intpass;43 intj;4446for(pass=0;passsize-1;pass+)49f

10、or(j=0;jarrayj+1)53 swap(&arrayj,&arrayj+1);54 5658606364 voidswap(int*element1Ptr,int*element2Ptr)65 66 inthold=*element1Ptr;67 *element1Ptr=*element2Ptr;68 *element2Ptr=hold;69 sizeof建算子sizeof(燮数型熊)回一偃I整数,造偃I整数便是此燮数型魅所估用的位元偃1数。fWH 2: sizeof ( int )F虢1 3: sizeof ( float )F虢1 4: sizeof ( double )fWH

11、 5:若 float real用来存放某一槿资料型别的位元偃11t可能曾随著系统上的不同而有所差巽。常你撰K的程式舆资料型别的大小有,而且必(在数槿H月简上轨行畤,你最好使用sizeof来判断资料型别所估用的位元区且偃I数。答案悬何?答案悬何?答案悬何?20;sizeof(real)答案卷何?WH6:若doublemoney22;sizeof(money)答案卷何?指檄典函数在函数中,若是想停回某偃I结果女合原呼叫函数,可以用return叙述,但是,return叙述只能傅回一偃I值!!所以,常程式中需要停遮雨偃I以上的值,就瓢法利用return叙述。此畤,指襟就可以解泱;函数僖遮多偃I傅回值的

12、冏题。MW1:ft下轨行结果(明)题研究II堂-指檄(Pointer)#includevoidswap(int,int);intmain(void)inta=3,b=5;printf(Beforeswap.);printf(a=%d,b=%dn,a,b);printf(Afterswap.);swap(a,b);printf(a=%d,b=%dn,a,b);return0;/*符雨数互换*/voidswap(intx,inty)inttemp;temp=x;x=y;y=temp;return;CALLbyVALUE(傅值呼叫)轨行结果:#includevoidswap(int*,int*);i

13、ntmain(void)inta=3,b=5;printf(Beforeswap.);printf(a=%d,b=%dn,a,b);printf(Afterswap.);swap(&a,&b);printf(a=%d,b=%dn,a,b);return0;/*符雨数互换*/voidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;return;CallbyReference(傅址呼叫)轨行结果:勤熊配置者己意If:【一雉指襟】float*abc;abc=(float*)malloc(sizeof(float);【二雉指襟】int*arrayl=(in

14、t*)malloc(nrows*sizeof(int*);for(i=0;inrows;i+)array1i=(int*)malloc(ncolumns*sizeof(int);#include#includeintmain()int*score;inti;intnum;intsum;floatave;sum=0;printf(IO俞入生人数:);scanf(%d,&num);score=(int*)malloc(num*sizeof(int);if(!score)printf(Memoryallocatefail!n);exit(1);for(i=0;i);scanf(%d,score+i)

15、;sum+=*(score+i);ave=(float)sum/(float)num;printf(Theaverageis%6n”,ave);system(PAUSE);return0;Homework:依摞使用者输入的资料数n,窗L哪生n存入弹列中,行排序。Class :SeatNo :NAME :SchoolID :12/7指襟随堂糠IT:日寺fW(30min)1、 算子曾傅回其算元存放在言自随ft中的位置。(5pt)2、 算子曾傅回其算元所指之物件的值。(5pt)三、ftw出以下叙述式(20pt)1. 宣告雨偃I整数燮数a,boa的初始值悬5,b的初始值悬102. 宣告雨偃I整数指檄p

16、tr1和ptr2。3. ptr1a的位址4. ptr2b的位址四、inta;int*p2;a=10;p2=&a;:*p2的值卷何?(5pt)五、若宣告舆程式叙述如下:inta5=4,620,30,5;int*ptr;ptr=a;出下列算式的值:1. *(ptr+3)=(5pt)2. *(ptr+0)=(5pt)六、ttW出下列程式轨行结果(5pt)#includeintmain(void)inta3=5,7,9;inti,sum=0;for(i=0;i3;i+)sum+=*(a+i);printf(sum=%dn,sum);return0;WMI题研究堂-指檄(Pointer)7就行结果:su

17、m=七、假double所估制I意It空8偃I位元(Bytes)。言青冏以下的障列宣告,doublestudent40;IiJsizeof(student)的值悬(Bytes)?(5pt)八、ttW出下列程式轨行结果(10pt)#includevoidrect(int,int,int*,int*);intmain(void)inta=5,b=8;intarea,length;rect(a,b,&area,&length);/*音十算面稹及it房*/printf(area=%d,totallength=%dn,area,length);return0;voidrect(intx,inty,int*ptr1,int*ptr2)*ptr1=x*y;*ptr2=2*(x+y);retur

温馨提示

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

评论

0/150

提交评论