久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

C語言程序設(shè)計教案 第十章指針(推薦五篇)

時間:2019-05-12 23:33:31下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《C語言程序設(shè)計教案 第十章指針》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《C語言程序設(shè)計教案 第十章指針》。

第一篇:C語言程序設(shè)計教案 第十章指針

第十章 指 針

課題:

教學(xué)目的: 教學(xué)重點: 教學(xué)難點: 第十章 指針

§1-§2

1、了解指針與地址的概念

2、掌握指針變量的定義、初始化及指針的運算 指針變量的定義、初始化及指針的運算

指針的運算

步驟一 復(fù)習(xí)引導(dǎo)

指針是C語言的一個重要概念,也是C語言的一個重要特色。正確而靈活地運用它,可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動態(tài)分配內(nèi)存;能方便地使用字符串;有效而方便地使用數(shù)組;在調(diào)用函數(shù)時能得到多于1個的值;能直接處理內(nèi)存地址等,這對設(shè)計系統(tǒng)軟件是很必要的。

指針的概念比較復(fù)雜,使用也比較靈活,因此初學(xué)者時常會出錯,務(wù)請在學(xué)習(xí)本章內(nèi)容時十分小心。

步驟二 講授新課

§10.1 地址和指針的概念

計算機的主存儲器被分成一個個存儲單元,為了區(qū)分各存儲單元,要為每個存儲單元編號,這個編號即地址。

例:i =3;

或 scanf(“%d”, &i);

是將3送給 i所在的空間。

例:將3送到變量I_pointer所“指向”的單元(即I所標(biāo)志的單元)。

所謂“指向”,是通過地址來體現(xiàn)的,I_pointer中的值為2000,它是變量I 的地址,這樣就在I_pointer和變量之間建立起一種聯(lián)系,即通過I_pointer能知道I的地址,從而找到變量I的內(nèi)存單元。因而在C語言中,將地址形象化地稱為“指針”。

意思是通過它能找到以它為地址的內(nèi)存單元。一個變量的地址稱為該變量的“指針”。

內(nèi)存單元的地址和內(nèi)存單元的內(nèi)容是兩個不同的概念。

指針:就是地址,即內(nèi)存單元的編號。

指針變量:用來存放另一變量的地址(即指針)的變量。

如:地址2000是變量 i的指針;i_pointer是指針變量,其值就是指針2000。

§10.2變量的指針和指向變量的指針變量

變量的指針就是變量的地址。

存放變量地址的變量是指針變量,用來指向另一個變量。

*i_pointer 表示 i_pointer 所指向的變量。

一、定義一個指針變量

指針變量的定義包含三個方面的內(nèi)容:

⑴ 指針類型說明,即定義變量為一個指針變量 ⑵ 指針變量名

⑶ 變量值(指針)所指向的變量的數(shù)據(jù)類型。格式:

存儲類型

基類型

*指針變量名;例:int *pointer_1, *pointer_2;

float *pointer_3;

char *pointer_4;

二、指針的引用

指針變量有兩個運算符: & :取地址運算符

功能:取變量地址;單目,右結(jié)合。

* :取內(nèi)容運算符(“間接訪問”運算符)

功能:只能跟地址,取變量所指向單元的內(nèi)容;單目,右結(jié)合。

例:&a為變量a的地址,*p 為指針變量p所指向的存儲單元。

例:int a=5, *p=&a;

printf(“%d”, *p);main(){ int a,b;

int *pointer_1,*pointer_2;

a=100;b=10;

pointer_1=&a;

/*把變量a的地址賦給pointer_1*/

pointer_2=&b;

/*把變量b的地址賦給pointer_2*/

printf(“%d,%dn”,a,b);

printf(“%d,%dn”,*pointer_1, *pointer_2);} 輸出結(jié)果:100, 10

100, 10

評注:

1、在第3行雖然定義了兩個指針變量,只是提供了兩個指針變量,但并未指向任何一個整型變量。稱為指針“懸空”。

2、最后一行的*pointer_1和pointer_2就是變量a和b。

3、程序中兩處出現(xiàn)*pointer_1等,含義不同。程序第3行中的*pointer_1表示定義指針變量pointer_1。它前面的*只是表示該變量是指針變量。程序最后一行中的*pointer_1則代表變量,即pointer_1所指向的變量。

4、第5行中的pointer_1=&a 是將a的地址賦給指針變量pointer_1,而不是*pointer_1。

注意:不應(yīng)寫成:*pointer_1=&a;

5、從上例中可看出,*pointer_1等價于a,*pointer_2等價于b,故凡在程序中出現(xiàn)a的地方均可用 *pointer_1 代替。所以,若有: int x, y, *px=&x;則下面的運算均是正確的: y=*px+1;

/*把 x 的內(nèi)容加1 送變量y*/ printf(“%dn”, px);

/*打印當(dāng)前x 的內(nèi)容*/ d=sqrt((double)px);

/*把x的平方根送變量d*/ px=0;

/*把 x 置為0*/ *px+=1;

/*把 x 的值加 1*/(*px)++;

/*使 x 的值加 1*/ y=(*px)++;

/*即y=x, x++*/

6、假設(shè)px和py都被定義為指向int 對象的指針,而且px當(dāng)前已指向了int 型變量x,則執(zhí)行:

py=px;

/*把指針px的內(nèi)容拷貝到指針py中去*/ 即

py和px 這兩個不同的指針指向了同一對象x

7、指針不是整數(shù),不能將它與整數(shù)混為一談。例:

# include main(){ int x=100,*p;p=x;printf(“%d”, p);}

例如:

# include main(){ int a, b, *d=&a;

b = d;

printf(“%d n”, b);

……

}——編譯不出錯,但得不到希望的值

關(guān)于&和*運算符的說明:

假設(shè)已執(zhí)行

pointer_1=&a;

1、&*pointer_1含義是什么?

&*pointer_1與&a相同,即變量a的地址。

2、*&a的含義是什么?

先進(jìn)行&a運算,得a的地址,再進(jìn)行*運算。

*&a、*pointer_1及變量a等價。

3、(*pointer_1)+ + 相當(dāng)于a + +。

它與*pointer_1 + + 不同。

4、*pointer_1 + + 等價于*(pointer_1 + +),即先進(jìn)行*運算,得到a的值,然后使pointer_1的值改變,這樣pointer_1不再指向a了。

例10.2:輸入a和b兩個整數(shù),按先大后小的順序輸出a和b。

main(){ int *p1,*p2,*p, a, b;

scanf(“%d,%d”,&a,&b);

p1=&a;p2=&b;

if(a

{p=p1;p1=p2;p2=p;}

printf(“n a=%d,b=%dn”,a,b);

printf(“max=%d,min=%dn”,*p1,*p2);

} 運行情況: 5,9 a=5,b=9 max=9,min=5

三、指針變量作為函數(shù)參數(shù)

例10.3對輸入的兩個整數(shù)按大小順序輸出。先考察如下程序,看是否能得到預(yù)期的結(jié)果

swap(int p1, int p2){ int temp;temp = p1;p1 = p2;p2 =temp;} main(){ int a, b;

scanf(“%d, %d”, &a, &b);

if(a

printf(“n%d,%dn”,a,b);} 不能得到預(yù)期的結(jié)果。改為:

swap(int *p1,int *p2){ int temp;

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

swap(pointer_1,pointer_2);

printf(“n%d,%dn”,a,b);}

注:如果想通過函數(shù)調(diào)用得到n個改變的值,可以:

1、在主調(diào)函數(shù)中設(shè)n 個變量,用n個指針變量指向它們;

2、然后將指針變量作實參,將這n 個變量的地址傳給所調(diào)用的函數(shù)的形參;

3、通過形參指針變量,改變該n個變量的值;

4、主調(diào)函數(shù)中就可以使用這些改變了值的變量。

四、指針(變量)的初始化 指針置初始化值的格式:

存儲類型

基類型

*指針名=初始化值; 如:main()

{ static int a;

int *p=&a, *p1=p;

…… } 再如: int *p = 0;

int *p = NULL;

五、指針的運算

1、指針的算術(shù)運算

指針僅能進(jìn)行加、減算術(shù)運算

如:p+n , p-n , p++ , p--, ++p ,--p

p-= n , p+= n , p1-p2 等 其中n是整數(shù),p、p1、p2均為指針;

施行加法運算時,指針向地址增大的方向移動; 施行減法運算時,指針向地址減小的方向移動; 移動長度取決于指針的基類型,由計算機決定; 如有:int a,b,c, *pt =&a;

pt++ 則指針向后移動兩個字節(jié); 再如:main()

{ int *p1,a=8,b=3;

p1=&a;

printf(“%d,%dn”,(*p1)++, *p1++);

printf(“%d,%dn”,a, *p1);

} 運行結(jié)果:3,8,4 注:p1+k = p1+k*sizeof(p1的基類型);

p1-k = p1-k*sizeof(p1的基類型);如:

strlen(char *s)

{ char *p=s;

while(*p!=?

主站蜘蛛池模板: 一个添下面两个吃奶把腿扒开| 夫前人妻被灌醉侵犯在线| 极品尤物一区二区三区| 伊人情人色综合网站| 国产精品久久久久9999不卡| 国产婷婷色一区二区三区在线| 午夜色大片在线观看免费| 六月丁香亚洲综合在线视频| 精品国产人成亚洲区| 美女极度色诱视频国产| 国产色视频免费| 野外亲子乱子伦视频丶| 欧美性猛交xxxx免费看| 国产 字幕 制服 中文 在线| 色婷婷亚洲婷婷7月| 边做边流奶水的人妻| 精品国产天堂综合一区在线| 无码av免费一区二区三区试看| 色综合久久一区二区三区| 韩国精品福利一区二区三区| 国产疯狂伦交大片| 丰满少妇高潮惨叫正在播放| 日韩 欧美 国产 一区三| 成人性生交大片免费看| 精品亚洲一区二区三区在线观看| 无遮挡激情视频国产在线观看| 欧洲美熟女乱又伦| 少妇无码一区二区三区免费| 国产精品ⅴ无码大片在线看| 亚洲综合av色婷婷| 久久se精品一区精品二区| 久久国产热精品波多野结衣av| 天天爱天天做天天添天天欢| 久久久久 亚洲 无码 av 专区| 中国鲜肉gay高中xx禁18网站| 动漫啪啪高清区一区二网站| 精品国产人成亚洲区| 中文字幕人成无码人妻综合社区| 亚洲国产精品久久一线不卡| 亚洲精品无码av中文字幕| 亚洲乱码日产精品一二三|