版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
補(bǔ)充內(nèi)容指針的本質(zhì)指針是變量指針的值就是內(nèi)存單元(變量)的地址
inti=100;
int*p=&i;int**pi=π0x0012ff4c0x0012ff640x0012ff640x0012ff4c0x0012ff48100pipi指針的類型“一個(gè)int型的指針”,指的是“一個(gè)類型為int*的指針”,編譯器認(rèn)為這樣的一個(gè)指針指向的內(nèi)存單元為2字節(jié),并將其內(nèi)容解釋成int類型的值p++等價(jià)于p=p+1*sizeof(int)字符型的指針是?int**p中p的類型是什么?指針的類型(續(xù))類型名和*結(jié)構(gòu)形成了新的指針類型,但*是和后面的變量結(jié)合
int*a,b,c和int*a,b,c的寫法效果一樣,只有a是int型的指針,而b和c仍是int型的變量在c中,大多數(shù)是將指針定義為語(yǔ)言中固有的數(shù)據(jù)類型,而在DS中我們將遇到的指針類型更加多樣化。指針的類型(續(xù))判斷一個(gè)指針是否有效?
if(p!=NULL)指針的初始化?如果指針變量是全局變量,則系統(tǒng)會(huì)默認(rèn)將其值設(shè)為NULL,但如果指針變量是局部變量,系統(tǒng)不會(huì)給它賦初值,程序員必須明顯指明其初值,否則會(huì)導(dǎo)致不可預(yù)測(cè)的結(jié)果.指針的類型(續(xù))指針不管是全局還是局部的,都應(yīng)當(dāng)在聲明它的時(shí)候初始化,要么賦予一個(gè)有效的地址,要以賦予NULL
int*pint=NULL; pint=0x1992;(這樣做的結(jié)果是什么??)指針的運(yùn)算int*p1,*p2;p++;p--;p+=5;p-=5;p2-p1;p2=p1;>,<,>=,<=,!=,==&(取址),*(取值)main(){
int*p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);p1=&a;p2=&b;
if(a<b){p=p1;p1=p2;p2=p;}
printf("\na=%d,b=%d\n\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);}Swap(int*p1,int*p2)
{inttemp;
temp=*p1;
*p1=*p2;
*p2=temp;
}main(){
int
a,b;
int*pointer-1,*pointer-2;
scanf("%d,%d",&a,&b);
pointer-1=&a;pointer-2=&B;if(a<b)Swap(pointer-1,pointer-2);
printf("\n%d,%d\n",a,b);}習(xí)題要求使用指針和子函數(shù)完成以下程序:輸入3個(gè)整數(shù)a、b、c
,按大小順序輸出。指針的傳遞可以將函數(shù)的參數(shù)聲明為指針,此時(shí),函數(shù)接受的參數(shù)是內(nèi)存單元的地址而不是內(nèi)存單元的值會(huì)帶來什么樣的影響?數(shù)組的本質(zhì)任何數(shù)組,不論是靜態(tài)聲明還是動(dòng)態(tài)創(chuàng)建的,其所有元素在內(nèi)存中都是連續(xù)字節(jié)存放的數(shù)組的本質(zhì)(續(xù))數(shù)組下標(biāo)數(shù)組下標(biāo)從0開始,到元素個(gè)數(shù)減1為止,下標(biāo)必須是整數(shù)或整數(shù)表達(dá)式,在引用數(shù)組元素時(shí),編譯器通過下標(biāo)值來計(jì)算所引用元素在內(nèi)存中的地址。
a[3]=100
以上圖為例,計(jì)算出a+3*sizeof(int)
得到0x004284FC,將原來的46改寫為100數(shù)組的本質(zhì)(續(xù))數(shù)組名 數(shù)組名本身就標(biāo)識(shí)了一個(gè)地址,數(shù)組名的值就是數(shù)組第一個(gè)元素的內(nèi)存單元首地址,即:a==&a[0],這樣,可以通過同類指針迭代來遍歷整個(gè)數(shù)組(如int*p=a;)?思考:p和a都標(biāo)識(shí)數(shù)組的首元素地址,但是有什么不同?數(shù)組的本質(zhì)(續(xù))引用數(shù)組元素的方法:(1)下標(biāo)法(2)指針法數(shù)組的本質(zhì)(續(xù))另一方面,不能通過數(shù)組名來訪問整個(gè)數(shù)組,除非它是帶有\(zhòng)0結(jié)束符的字符數(shù)組(即字符串)。由于這個(gè)原因,任何兩個(gè)數(shù)組之間不能直接賦值
inta[10]={0,1}
intb[10]={0,1,2,3,4,5,6,7,8,9} a=b;//錯(cuò)誤數(shù)組的本質(zhì)(續(xù))想將一個(gè)數(shù)組的值賦給另一個(gè)數(shù)組,必須按元素逐個(gè)賦值,或者使用內(nèi)存拷貝函數(shù)memcpy()
main(){
inta[]={1,2};
intb[]={5,6,7,8};
inti;
clrscr(); memcpy(a,b,4);
for(i=0;i<2;i++)
printf("%d",a[i]);}數(shù)組的初始化指定數(shù)組的元素個(gè)數(shù)
inta[10];不指定數(shù)組的元素個(gè)數(shù),而直接初始化
inta[]={1,2,3,4,5,6}; (等價(jià)于:inta[6];a[0]=1;a[1]=2;…)數(shù)組的初始化同時(shí)指定元素個(gè)數(shù)并初始化
inta[6]={1,2,3,4,5,6};
inta[100]={1};常見錯(cuò)誤inta[5]={1,2,3,4,5,6};inta[10]={5,,12,2};注意防止越界系統(tǒng)不會(huì)對(duì)數(shù)組的邊界進(jìn)行檢測(cè),防止越界是程序員個(gè)人的事二維數(shù)組二維數(shù)組在C語(yǔ)言中以“行序優(yōu)先”來存儲(chǔ)元素,即在存儲(chǔ)時(shí),先存儲(chǔ)一行,再存第二行。inta[5][3],當(dāng)我們?cè)L問a[4][1]時(shí),實(shí)際上編譯器是*((a+4*3)+1),在定義二維數(shù)組時(shí),編譯器為了計(jì)算其地址必須知道該數(shù)組的列數(shù),而不必知道行數(shù)。數(shù)組傳遞傳值、傳址★傳值:將數(shù)組元素作為參數(shù)傳遞★傳址:將數(shù)組的地址作為參數(shù)傳遞數(shù)組傳遞數(shù)組不能從函數(shù)的return語(yǔ)句中返回,如何實(shí)現(xiàn)數(shù)組元素值的雙向傳遞?--傳址。傳值--如果想按值來傳遞數(shù)組,可以傳遞數(shù)組元素,或者可以將數(shù)組封裝起來,例如放到結(jié)構(gòu)體中做為一個(gè)成員,因?yàn)榻Y(jié)構(gòu)體默認(rèn)是按值傳遞的。字符數(shù)組字符數(shù)組就是元素為字符變量的數(shù)組。字符數(shù)組與字符串?字符串是以\0為結(jié)束符的字符數(shù)組,因此字符數(shù)組不一定就是字符串。如果用一個(gè)字符串常量來初始化一個(gè)字符數(shù)組,數(shù)組的長(zhǎng)度至少要比字符串常量的長(zhǎng)度大1,用來保存‘\0’。字符數(shù)組(續(xù))chararr1[]={‘a(chǎn)’,’b’,’\0’,’d’,’e’};chararr2[]=“hello”;char*p=“hello”;printf(“%d”,sizeof(arr1));printf(“%d”,strlen(arr1));printf(“%d”,sizeof(arr2));printf(“%d”,strlen(arr2));printf(“%d”,strlen(p));字符指針C可用char*表示字符串 main(){ chars[]={‘a(chǎn)’,‘b’,‘c’,’\0’},*p=s; char*pchar="abc“;
printf("%s",p);
printf(“%s“,s);
printf("%s",pchar);}字符串復(fù)制和比較字符串復(fù)制必須使用strcpy或strncpy,不能用=復(fù)制,那樣是字符指針的賦值。同樣不要用==和>=,!=比較兩個(gè)字符串,而應(yīng)用strcmp,strncmp;例題:例10.5輸出數(shù)組中的全部元素。假設(shè)有一個(gè)a數(shù)組,整型,有10個(gè)元素。要輸出各元素的值有三種方法:(1)下標(biāo)法。main(){
inta[10];
inti;for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");for(i=0;i<10;i++)
printf("%d",a[i]);}(2)通過數(shù)組名計(jì)算數(shù)組元素地址,找出元素的值。
main(){
inta[10];
inti;for(i=0;i<10;i++)
scanf("%d",a+i);
printf("\n");for(i=0;i<10;i++)
printf("%D",*(a+i));}(3)用指針變量指向數(shù)組元素。main(){
inta[10];
int*p,i;
for(p=a;p<a+10;p++)
scanf("%d",p);
printf("\n");for(p=a;p<(a+10);p++)
printf("%d",*p);}例題將字符串a(chǎn)復(fù)制為字符串bmain(){chara[]="iamaboy.",b[20];
inti;
for(i=0;*(a+i)!=′\0′;i++)*(b+i)=*(a+i);*(b+i)=′\0′;
printf("stringais:%s\n",a);
printf("stringbis:");for(i=0;b[i]!=′\0′;i++)
printf("%c",b[i]);
printf("\n");}main(){chara[]="IamaBoy.",B[20],*p1,*p2;
inti;p1=a;p2=B;for(;*p1!=′\0′;p1++,p2++)*p2=*p1;*p2=′\0′;
printf("stringais:%S\n",a);
printf("stringBis:");for(i=0;B[i]!=′\0′;i++)
printf("%C",B[i]);
printf("\n");}結(jié)構(gòu)體將基本數(shù)據(jù)組合起來列成更大的結(jié)構(gòu)數(shù)據(jù)類型,這就是結(jié)構(gòu)體,也可以叫做用戶自定義數(shù)據(jù)類型。例子:三維系統(tǒng)中的座標(biāo)結(jié)構(gòu)體的定義Struct
addr{ charname[30]; charstreet[40]; charcity[20]; unsignedlongintzip;};//一個(gè)結(jié)構(gòu)定義體就是一條語(yǔ)句結(jié)構(gòu)體變量定義//以新定義的addr為新的數(shù)據(jù)類型struct
addr{ charname[30]; charstreet[40]; charcity[20]; unsignedlongintzip;}addr_a,addr_b,addr_c;如何定義結(jié)構(gòu)體和結(jié)構(gòu)體變量?訪問結(jié)構(gòu)元素每個(gè)結(jié)構(gòu)元素都可由句點(diǎn)操作符/成員操作符訪問
addr_a.zip=12345;
printf(“%d”,addr_a.zip);也可通過指向運(yùn)算符->訪問結(jié)構(gòu)元素。結(jié)構(gòu)體的使用Struct
struct_type{
inta,b; charch;};Main(){
struct
struct_type
arg;
arg.a=1000; f1(arg);}f1(structstruct_type
parm){
printf(“%d”,parm.a)}結(jié)構(gòu)指針Struct
addr*addr_pointer;//結(jié)構(gòu)指針有兩種用途(1)對(duì)函數(shù)的引用調(diào)用;(2)建立鏈表和其它動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)
通過結(jié)構(gòu)指針訪問結(jié)構(gòu)成員:
printf(addr_pointer->name);
printf(*addr_);結(jié)構(gòu)體例題1有一個(gè)結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號(hào)、姓名和3門課的成績(jī)。要求在main函數(shù)中賦以值,在另一函數(shù)print中將它們打印輸出。今用結(jié)構(gòu)體變量作函數(shù)參數(shù)。#include<string.h>#defineFORMAT"%d\n%s\n%f\n%f\n%f\n"structstudent{intnum;charname[20];floatscore[3];};main(){ voidprint(structstudent);
structstudentstu;
stu.num=12345;
strcpy(stu.name,"LiLi");stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.6;
print(stu);}voidprint(structstudentstu){
printf(FORMAT,stu.num,,stu.score[0],stu.score[1],stu.score[2]);
printf("\n");}解法2:使用結(jié)構(gòu)體指針改用指向結(jié)構(gòu)體變量的指針作實(shí)參。可以在上面程序的基礎(chǔ)上作少量修改即可#defineFORMAT"%d\n%s\n%f\n%f\n%f\n"
structstudent{intnum;charname[20];floatscore[3];}stu={12345,"LiLi",67.5,89,78.6};main(){ voidprint(structstudent*);/*形參類型修改成指向結(jié)構(gòu)體的指針變量*/
print(&stu);/*實(shí)參改為stu的起始地址*/}
voidprint(structstudent*p)/*形參類型修改了*/{
printf(FORMAT,p->num,p->name,p->score[0],p->score[1],p->score[2]);/*用指針變量調(diào)用各成員之值*/
printf("\n");}實(shí)驗(yàn)二:個(gè)人通訊錄試設(shè)計(jì)一個(gè)個(gè)人通訊錄,能夠在通訊錄中插入,刪除,按名字查找聯(lián)系人的信息.要求: 1、使用結(jié)構(gòu)體數(shù)組來存放聯(lián)系人的信息 2、對(duì)聯(lián)系人信息的插入、刪除、查找均設(shè)計(jì)成獨(dú)立的子函數(shù)用typpedef類型定義typedef可用于對(duì)已定義的數(shù)據(jù)類型產(chǎn)生一個(gè)別名,但并不產(chǎn)生新的數(shù)據(jù)類型。例:typedef
int
INT;
INTi,j;回顧如何使用typedef定義結(jié)構(gòu)體變量及結(jié)構(gòu)體指針!!用typpedef類型定義structstudent{ …… ……};typedef
structstudentSTU;STUs1,s2,*Ps1,*ps2;typedef
structstude
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:具身認(rèn)知視域下英漢數(shù)量性“大量”構(gòu)式的主觀化對(duì)比研究
- 2025年《英語(yǔ)可以這樣教》的讀書心得(3篇)
- 2025年上半年州教育計(jì)財(cái)工作總結(jié)(三篇)
- 2025年度個(gè)人房產(chǎn)抵押貸款擔(dān)保費(fèi)率標(biāo)準(zhǔn)4篇
- 2025年度綠色有機(jī)大米產(chǎn)地直銷合作合同范本3篇
- 二零二五年度倉(cāng)儲(chǔ)物流設(shè)施租賃合同終止協(xié)議4篇
- 2025版危險(xiǎn)品運(yùn)輸事故應(yīng)急救援預(yù)案合同3篇
- 2024鋁單板購(gòu)銷合同模板
- 2025年度新型銀杏樹種植與銷售合作協(xié)議4篇
- 三輪車買賣標(biāo)準(zhǔn)協(xié)議模板2024版版B版
- 【探跡科技】2024知識(shí)產(chǎn)權(quán)行業(yè)發(fā)展趨勢(shì)報(bào)告-從工業(yè)轟鳴到數(shù)智浪潮知識(shí)產(chǎn)權(quán)成為競(jìng)爭(zhēng)市場(chǎng)的“矛與盾”
- 《中國(guó)政法大學(xué)》課件
- GB/T 35270-2024嬰幼兒背帶(袋)
- 遼寧省沈陽(yáng)名校2025屆高三第一次模擬考試英語(yǔ)試卷含解析
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(新題型:19題)(基礎(chǔ)篇)(含答案)
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- Profinet(S523-FANUC)發(fā)那科通訊設(shè)置
- 第三章-自然語(yǔ)言的處理(共152張課件)
- 醫(yī)學(xué)教程 常見化療藥物歸納
- 高一生物生物必修一全冊(cè)考試題帶答題紙答案
- 統(tǒng)編版九年級(jí)歷史下冊(cè)第一單元教案教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論