版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計(jì)
2023翻轉(zhuǎn)課堂實(shí)用教程9.1指針123指針的概念指針變量的定義與使用指針變量的運(yùn)算知識(shí)點(diǎn)指針的案例分析案例分析指針相關(guān)練習(xí)題練習(xí)題9.1.1指針知識(shí)點(diǎn)程序在運(yùn)行時(shí),會(huì)為變量分配內(nèi)存空間。分配的內(nèi)存空間會(huì)有一個(gè)唯一的地址編號(hào),在C語言中又叫做指針。通過指針可以找到該內(nèi)存單元。地址取值范圍:(32位系統(tǒng)為例)32位系統(tǒng)的內(nèi)存條,32個(gè)元件,232個(gè)組合=4*230,4GB內(nèi)存。內(nèi)存地址編號(hào)從0X00000000到0XFFFFFFFF(十六進(jìn)制表示)指針的概念指針變量保存某個(gè)內(nèi)存空間的地址,并對(duì)該內(nèi)存空間中的值進(jìn)行操作。指針變量的定義方式為:數(shù)據(jù)類型名*指針變量名;或者數(shù)據(jù)類型名*指針變量名=地址值;1.指針變量的定義與使用指針變量指向的變量的數(shù)據(jù)類型指針變量聲明符保存的是某個(gè)變量的地址int*pInt;//指向int型變量的指針char*pStr=NULL;//NULL為空指針,stdio.hint*pInt1,*pInt2;9.1.1指針知識(shí)點(diǎn)舉例:doublenum=3.14;double*pDouble=#//定義一個(gè)指向double型變量num的指針pDouble1.指針變量的定義與使用指針變量pDouble指向num示意圖&num3.14pDoublenum&取地址運(yùn)算符,num的地址pDouble指向num9.1.1指針知識(shí)點(diǎn)指針變量占用的內(nèi)存大小,僅與地址信息的大小有關(guān),與類型無關(guān)。#include<stdio.h>intmain(){inta=100;charc='C';doubled=3.14;int*pInt=&a;char*pStr=&c;double*pDouble=&d;//分別輸出int指針、字符指針、浮點(diǎn)型指針占用的字節(jié)數(shù)printf("%d%d%d",sizeof(pInt),sizeof(pStr),sizeof(pDouble));return0;}1.指針變量的定義與使用運(yùn)行結(jié)果(64位系統(tǒng),8個(gè)字節(jié))8889.1.1指針知識(shí)點(diǎn)(1)取內(nèi)容與取地址通過變量的地址/指針,同樣可以訪問到該變量的值。#include<stdio.h>intmain(void){ int*p,a=3; p=&a;
//兩種獲取變量a的方式,*p和a等價(jià)。 printf("*p的值為:%d,a的值為:%d\n",*p,a); *p=6;//通過指針p可以修改a的值 printf("*p的值為:%d,a的值為:%d\n",*p,a); return0;}2.指針變量的運(yùn)算取內(nèi)容,*p:p指向的變量a的值,等價(jià)取地址,&a:a的地址運(yùn)行結(jié)果:*p的值為:3,a的值為:3*p的值為:6,a的值為:6&a3
pa*p9.1.1指針知識(shí)點(diǎn)(2)賦值運(yùn)算doublenum=3.14,value=0.618;double*pDouble1=&num,pDouble2;//(a)pDouble1=&value;//(b)修改pDouble1的值,讓其指向value變量pDouble2=pDouble1;//(c)2.指針變量的運(yùn)算(a)(b)(c)9.1.1指針知識(shí)點(diǎn)(3)加法、減法和比較運(yùn)算指針變量還可以進(jìn)行加法、減法和比較運(yùn)算,一般當(dāng)指針變量指向數(shù)組中的元素時(shí),才有實(shí)際的含義。2.指針變量的運(yùn)算9.1.1指針知識(shí)點(diǎn)指針變量只能與整數(shù)常量i進(jìn)行加減法運(yùn)算,加或減同類型數(shù)據(jù)長度的i倍,指針往后或往前移動(dòng)i個(gè)同類型的數(shù)據(jù)。指針pI的加減運(yùn)算圖#include<stdio.h>intmain(){
inta=30,*p=&a,*pI=&a;
doubleb=3.14,*pD=&b;
charc='C',*pC=&c;
//前3個(gè)輸出語句,輸出各個(gè)類型占用的字節(jié)數(shù)
printf("sizeof(int)is%d\n",sizeof(int));
printf("sizeof(double)is%d\n",sizeof(double));
printf("sizeof(char)is%d\n",sizeof(char));
printf("初始值,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);//第4個(gè)輸出,先輸出各個(gè)指針的最初值
pI--;pD=pD-1;pC--;//第5個(gè)輸出,輸出-1后的值
printf("地址-1后,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);
pI+=2;pD+=2;pC+=2;//第6、7個(gè)輸出
printf("地址+2后,pI:%#X,pD:%#X,pC:%#X\n",pI,pD,pC);
printf("*pI:%d,*pD:%f,*pC:%c\n",*pI,*pD,*pC);
if(p==pI)printf("p和pI值相同,指向同一變量。");//第8個(gè)輸出,比較p和pI指針
elseprintf("p和pI值不同。");
return0;}9.1.1指針知識(shí)點(diǎn)運(yùn)行結(jié)果:sizeof(int)is4sizeof(double)is8sizeof(char)is1初始值,pI:0X62FE04,pD:0X62FDF8,pC:0X62FDF7地址-1后,pI:0X62FE00,pD:0X62FDF0,pC:0X62FDF6地址+2后,pI:0X62FE08,pD:0X62FE00,pC:0X62FDF8*pI:6487544,*pD:0.000000,*pC:p和pI值不同。(3)加法、減法和比較運(yùn)算%#X是輸出以0X開頭的十六進(jìn)制地址。9.1.2指針案例分析案例9.1.1指針變量運(yùn)算案例分析#include<stdio.h>intmain(void){ int*p,*pI,a=3; double*pD,num=0.618; pI=&a;//p指向a printf("*pI的值為:%d,a的值為:%d\n\n",*pI,a);
//修改a變量的值,*p的值也跟著改變 a=33; printf("*pI的值為:%d,a的值為:%d\n\n",*pI,a);
//修改*p變量的值,a的值也跟著改變 (*pI)++; printf("*pI的值為:%d,a的值為:%d\n\n",*pI,a); //同類型的指針可以相互賦值,兩者指向同一個(gè)變量a p=pI; printf("*p的值為%d,*pI的值為%d,a的值為%d\n",*p,*pI,a); //以十六進(jìn)制形式輸出p和pI的值,均為a的地址 printf("a的地址為%#0X;",&a); printf("p和pI的值為%#0X和%#0X\n\n",p,pI);
pD=# //*pD就是num的值0.618,*p就是a的值34 *pD=*pD+*p; //執(zhí)行完上面代碼后,*pD和num的值均變?yōu)榱?4.618 printf("*pD的值為:%f,num的值為:%f",*pD,num);return0;}*pI的值為:3,a的值為:3*pI的值為:33,a的值為:33*pI的值為:34,a的值為:34
*p的值為34,*pI的值為34,a的值為34a的地址為0X62FE04;p和pI的值為0X62FE04和0X62FE04
*pD的值為:34.618000,num的值為:34.618000課堂練習(xí)題9.1.1寫出執(zhí)行下面程序后的輸出結(jié)果#include<stdio.h>intmain(){ inta=2,b=3; int*p1=&a,*p2=&b; printf("p1指向的值為:%d,p2指向的值為%d\n",*p1,*p2); p2=p1; *p2=b; printf("p1指向的值為:%d,a的值為%d",*p1,a); return0;}9.1.3指針課堂練習(xí)題課堂練習(xí)題9.1.2查找下面程序中的2處錯(cuò)誤。輸入a和b,并定義指針p1和p2分別指向a和b,通過取指針值的方式計(jì)算a和b的和,并輸出和。#include<stdio.h>intmain(){ inta,b; int*p1,*p2; p1=&a,p2=&b; scanf("%d%d",&a,&p2); printf("a+b=%d",p1+*p2); return0;}課堂練習(xí)題9.1.3參照案例9.1.1,自行設(shè)計(jì)一個(gè)對(duì)指針操作的程序,并分析程序運(yùn)行的結(jié)果。9.1.3指針課堂練習(xí)題9.3.3指針與數(shù)組課堂練習(xí)題課堂練習(xí)題9.3.2:寫出執(zhí)行下面程序后的輸出結(jié)果#include<stdio.h>intmain(){ inti; inta[10]=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版?zhèn)€人與企業(yè)間的商務(wù)汽車租賃及行程安排合同3篇
- 二零二五版旅游產(chǎn)業(yè)反擔(dān)保合同與旅游資產(chǎn)抵押協(xié)議3篇
- 二零二五年建筑玻璃采購合同標(biāo)準(zhǔn)2篇
- 二零二五年度離婚后按揭房產(chǎn)權(quán)屬分割及子女撫養(yǎng)費(fèi)用協(xié)議3篇
- 個(gè)人借款擔(dān)保合同書2024年版版B版
- 二零二五年知識(shí)產(chǎn)權(quán)保護(hù)保密協(xié)議翻譯服務(wù)協(xié)議3篇
- 二零二五版企業(yè)內(nèi)部無息短期資金互助借款合同3篇
- 天津財(cái)經(jīng)大學(xué)《兒童美術(shù)創(chuàng)作與指導(dǎo)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版股權(quán)合作的協(xié)議書范本
- 四川司法警官職業(yè)學(xué)院《Web應(yīng)用開發(fā)課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 翼狀胬肉病人的護(hù)理
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動(dòng)化系統(tǒng)用戶操作及問題處理培訓(xùn)
- 家庭教養(yǎng)方式問卷(含評(píng)分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級(jí)語文下冊《蜘蛛開店》
- 鍋爐升降平臺(tái)管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
評(píng)論
0/150
提交評(píng)論