




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語言由淺入深理解指針目錄1.相關(guān)概念2.指針的定義方法3.指針的分類4.指針和變量的關(guān)系5.指針與數(shù)組的關(guān)系6.指針的運(yùn)算
1.相關(guān)概念
操作系統(tǒng)給每個(gè)存儲(chǔ)單元分配了一個(gè)編號(hào),從ox00000000~0xffffffff,這個(gè)編號(hào)稱為地址,指針就是地址指針變量:即這個(gè)變量用來存放一個(gè)地址編號(hào)無論什么類型的地址,都是存儲(chǔ)單元的變換,在32位平臺(tái)下都是4個(gè)字節(jié),即任何類型的指針變量都是4個(gè)字節(jié)大小,64位操作系統(tǒng)占8個(gè)字節(jié)。對(duì)應(yīng)類型的指針變量,只能存放對(duì)應(yīng)類型的地址。例如整型指針變量,只能存放整型變量的地址。
#includestdio.h
intmain()
char*a;
short*b;
int*c;
long*d;
float*e;
double*f;
printf("sizeof(a)=%d\n",sizeof(a));
printf("sizeof(b)=%d\n",sizeof(b));
printf("sizeof(c)=%d\n",sizeof(c));
printf("sizeof(d)=%d\n",sizeof(d));
printf("sizeof(e)=%d\n",sizeof(e));
printf("sizeof(f)=%d\n",sizeof(f));
return0;
}
可見,我的操作系統(tǒng)是64位的。
為什么在64位系統(tǒng)中指針的大小是8,而32位的卻是4?
64位系統(tǒng),這個(gè)位數(shù)指的是CPU里面的通用寄存器的數(shù)據(jù)寬度為64位,也就是說一個(gè)地址占二進(jìn)制位數(shù)是64,所以:
sizeof(double*)==sizeof(int*)==sizeof(char*)==64/8==8
32位系統(tǒng),同理,他的一個(gè)地址占32位二進(jìn)制空間,sizeof(double*)==sizeof(int*)==sizeof(char*)==32/8==4
其實(shí)明白了兩個(gè)系統(tǒng)的尋址原理就能明白,大體就是這個(gè)原因。地址跟系統(tǒng)有關(guān),但是基本數(shù)據(jù)類型占的大小是由C語言本身決定。
2.指針的定義方法
數(shù)據(jù)類型*指針變量名
intp;//定義了一個(gè)指針變量p在定義指針變量的時(shí)候,是用來修飾變量的,代表指針變量。
關(guān)于指針的運(yùn)算符:
取地址*取值
#includestdio.h
intmain()
inta=100;
int*p;//定義一個(gè)指針變量
p=//給指針變量賦值
printf("a=%d,%d\n",a,*p);//*p等價(jià)于變量a
return0;
拓展:如果一行中定義多個(gè)指針變量,每個(gè)變量前面都要加*修飾
3.指針的分類
字符指針短整型指針整型指針長(zhǎng)整型指針float型指針double型指針函數(shù)指針結(jié)構(gòu)體指針指針的指針數(shù)組的指針
4.指針和變量的關(guān)系
引用變量的方法:
1.直接通過變量的名稱
2.通過*指針名稱引用
#includestdio.h
intmain()
int*p1,*p2,temp,a,b;
p1=
p2=
printf("請(qǐng)輸入a,b的值:\n");
scanf("%d%d",p1,p2);//和之前的scanf不同,這里直接用p1p2作為寫入地址。
temp=*p1;//用p1指向的變量a給temp賦值
*p1=*p2;//用p2指向的變量b給p1指向的變量a賦值
*p2=temp;//temp給p2指向的變量b賦值
printf("a=%db=%d\n",a,b);
printf("*p1=%d,*p2=%d\n",*p1,*p2);
return0;
如果想讓不同類型的指針相互賦值的時(shí)候,需要強(qiáng)制類型轉(zhuǎn)換:
#includestdio.h
intmain()
inta=0x1234,b=0x5678;//4個(gè)字節(jié)
char*p1,*p2;//char類型只能保存一個(gè)字節(jié)
printf("%#x%#x\n",a,b);
p1=(char*)//強(qiáng)制類型轉(zhuǎn)換
p2=(char*)
printf("%#x%#x\n",*p1,*p2);
p1++;//指針向上移動(dòng)
p2++;
printf("%#x%#x\n",*p1,*p2);
return0;
5.指針與數(shù)組的關(guān)系
指針保存的是數(shù)組第一個(gè)元素的地址
也可以通過*(p+2)=100給當(dāng)前地址的下一個(gè)變量賦值
#includestdio.h
intmain(){
inta[5]={0,1,2,3,4};
int*p;
p=a;
//指針指向數(shù)組a的第一個(gè)元素的首地址
printf("a[2]=%d\n",a[2]);
printf("p[2]=%d\n",p[2]);
//*(a+n)==*(p+n)==a[n]==p[n]
printf("*(p+2)%d\n",*(p+2));
printf("*(a+2)%d\n",*(a+2));
printf("p=%p\n",p);
printf("p+2=%p\n",p+2);
return0;
}
6.指針的運(yùn)算
指針可以加一個(gè)整數(shù),往下指幾個(gè)它指向的變量,結(jié)果還是地址
#includestdio.h
voidtest1()
inta[10];
int*p,*q;
p=a;
q=p+2;//pq間隔8個(gè)字節(jié),意味著加一個(gè)整數(shù)最終移動(dòng)的字節(jié)數(shù)與指針變量的類型也有關(guān)系
printf("p=%p\n",p);
printf("q=%p\n",q);
return;
intmain()
test1();
return0;
}
兩個(gè)相同的指針可以比較大小
前提:指向同一個(gè)數(shù)組的元素
#includestdio.h
voidtest2()
inta[10];
int*p,*q;
p=a[1];
q=a[6];
if(pq)
printf("pq\n");
elseif(pq)
printf("pq\n");
else
printf("p=q\n");
return;
intmain()
//test1();
test2();
return0;
}
兩個(gè)同類型的指針可以做減法
前提:指向同一個(gè)數(shù)組元素,減法的結(jié)果是指針指向的中間有多少個(gè)元素
#includestdio.h
voidtest3()
inta[10];
int*p,*q;
p=a[0];
q=a[3];
printf("%ld\n",q-p);
return;
intmain()
//test1();
//test2();
test3();
return0;
}
兩個(gè)相同類型的指針可以相互賦值
#includestdio.h
voidtest4()
inta=100;
int*p,*q;
p=
printf("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省皖南八校2024-2025學(xué)年高一下學(xué)期4月期中生物試題 含解析
- 鄭州車位買賣合同協(xié)議
- 車位場(chǎng)地出租合同協(xié)議
- 安全管理知識(shí)在外語考試中的試題及答案
- 道砟購銷合同三方協(xié)議
- 無人機(jī)考試知識(shí)的試題及答案
- 備考中的中級(jí)會(huì)計(jì)試題及答案
- 運(yùn)輸合同協(xié)議書范文模板
- 車間拆除復(fù)原合同協(xié)議
- 車位銷售協(xié)議合同協(xié)議
- 船舶與海洋工程2025年相關(guān)知識(shí)考試試卷及答案
- 吉林銀行筆試題庫及答案
- 《危險(xiǎn)化學(xué)品企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化規(guī)范》專業(yè)深度解讀與應(yīng)用培訓(xùn)指導(dǎo)材料之8:5管理要求-5.8作業(yè)安全(雷澤佳編制-2025A0)
- Unit6Integration(A-C)課件譯林版(2024)英語七年級(jí)下冊(cè)
- (二模)2024~2025學(xué)年度蘇錫常鎮(zhèn)四市高三教學(xué)情況調(diào)研(二)物理試卷(含答案)
- 基于深度學(xué)習(xí)的人臉老化算法研究
- 期貨從業(yè)人員資格2024年筆試考試題庫含答案
- 比亞迪充電樁轉(zhuǎn)讓合同協(xié)議
- 甘肅開放大學(xué)2024年《信息技術(shù)與信息管理》形考作業(yè)1-4答案
- 2024年大學(xué)生電子版三方協(xié)議書模板
- 解聘證明范本
評(píng)論
0/150
提交評(píng)論