第8章 指針、結(jié)構(gòu)體與預(yù)處理命令_第1頁(yè)
第8章 指針、結(jié)構(gòu)體與預(yù)處理命令_第2頁(yè)
第8章 指針、結(jié)構(gòu)體與預(yù)處理命令_第3頁(yè)
第8章 指針、結(jié)構(gòu)體與預(yù)處理命令_第4頁(yè)
第8章 指針、結(jié)構(gòu)體與預(yù)處理命令_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第八章第八章指針、結(jié)構(gòu)體與預(yù)處理命令2目標(biāo)q理解指針的概念 q定義指針變量q掌握對(duì)指針的操作q理解指針和數(shù)組的關(guān)系q理解結(jié)構(gòu)體的概念和定義q理解預(yù)處理指令 內(nèi)存地址.P150內(nèi)存每個(gè)字節(jié)的地址1count圖8-1 變量在32位機(jī)上的內(nèi)存映像0 x0013FF780 x0013FF790 x0013FF7A0 x0013FF7B4指針簡(jiǎn)介 2-1 .P150-P151內(nèi)存10int xED53地址變量數(shù)據(jù)ED53int ptr_x指針指針 ptr_x 指向變量 x5q指針也是一個(gè)變量,只不過(guò)該變量中存儲(chǔ)的是另一個(gè)對(duì)象的內(nèi)存地址q如果一個(gè)變量存儲(chǔ)另一個(gè)對(duì)象的地址,則稱該變量指向這個(gè)對(duì)象q由于指針值

2、是數(shù)據(jù),指針變量可以賦值,所以一個(gè)指針的指向在程序執(zhí)行中可以改變。指針p 在執(zhí)行中某時(shí)刻指向變量x,在另一時(shí)刻也可以指向變量y指針簡(jiǎn)介 2-2 .P150-P1516聲明并初始化指針變量. P151-P156數(shù)據(jù)類型 *指針名;int *ptrnum;char *ptralpha;float *rate_ptr;double *p, *q; 值為NULL的指針?lè)Q為空指針,這意味著,指針并不指向任何地址。 在頭文件 stdio.h 中,NULL 定義為常量。ptrnum = NULL;7指針相關(guān)的運(yùn)算符2-1 . P151-P156int num, *ptrnum;ptrnum = &n

3、um; 內(nèi)存100numFF7Cptrnum指針FF7C8指針相關(guān)的運(yùn)算符2-2 . P151-P156int num, *ptrnum;ptrnum = #*ptrnum=15; 內(nèi)存100numFF7Cptrnum指針FF7C15指針變量的賦值. P156-P159q “&”:取地址運(yùn)算符,用來(lái)得到一個(gè)對(duì)象的地址,是一個(gè)一元操作符。 賦值格式賦值格式1 聲明指針同時(shí)進(jìn)行初始化 數(shù)據(jù)類型數(shù)據(jù)類型 * *指針名指針名 初始地址;初始地址; 例例 int x; int *m = &x; 賦值格式賦值格式2 聲明后單獨(dú)使用賦值語(yǔ)句 指針名指針名 內(nèi)存地址;內(nèi)存地址;

4、 例例 int a, b10, *p, *q; p = &a ; q=b ;( (為什么不同?為什么不同?) )指針變量的賦值. P156-P159q注意注意 1. 不允許把一個(gè)值賦予指針變量 int *p; p=1000; 2. 被賦值的指針變量前不能再加“*” q int a, *p=&a;q int a,*p; *p=&a; ( (正確的怎么寫(xiě)正確的怎么寫(xiě)?)?)內(nèi)存用戶數(shù)據(jù)區(qū)變量 i變量 j變量 p362000200020043010例例 int i=3,j=6; int *p=&i;思考思考 1. printf(“%d”,p); ?2.想輸出j的地址,

5、怎么寫(xiě)?指針變量的賦值. P156-P159指針變量的引用q“*”:定義時(shí)定義時(shí),表示聲明一個(gè)指針變量; 使用時(shí)使用時(shí),表示指針?biāo)赶虻淖兞康膬?nèi)容q格式 *變量名 /獲取指向變量的值 例 int a=10,*p, b; p = &a; 思考 printf(“%d”, p); printf(“%d”, a); printf(“%d”,*p); /假設(shè)a的內(nèi)存地址為2000H.13指針的特點(diǎn)q 指針變量的命名規(guī)則和其他變量的命名規(guī)則一樣q 指針不能與現(xiàn)有變量同名 q 指針可存放 C 語(yǔ)言中的任何基本數(shù)據(jù)類型、數(shù)組和其他所有高級(jí)數(shù)據(jù)結(jié)構(gòu)的地址q 若指針已聲明為指向某種類型數(shù)據(jù)的地址,則它不能

6、用于存儲(chǔ)其他類型數(shù)據(jù)的地址q 應(yīng)為指針指定一個(gè)地址后,才能在語(yǔ)句中使用指針14指針使用示例1#include void main()int var = 10;int *ptr_var;ptr_var = &var; printf( var 的值是: %d, var);printf(n var 的內(nèi)存地址是: %x, &var);printf(n 指針 ptr_var 的地址是: %xn, &ptr_var);printf(n var 的值是: %d, *ptr_var);printf(n var 的地址是: %xn, ptr_var);內(nèi)存內(nèi)存varptr_var101

7、2ff7cvar的值是:10var 的內(nèi)存地址是:12ff7c12ff7c12ff78指針ptr_var的地址是:12ff78var的值是:10var的地址是:12ff7c15指針使用示例2void main() int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf( num1 的值是: %d, *ptr1); printf(n num1 的地址是: %x n, ptr1); ptr2 = &num2; printf(n num2 的值是: %d, *ptr2); printf(n num2 的地址是

8、: %x n, ptr2); *ptr2 = *ptr1; printf(n 重新賦值后 num2 的值是: %d, *ptr2); printf(n 重新賦值后 num2 的地址是: %xn, ptr2); 內(nèi)存內(nèi)存num1ptr15012ff7c12ff7cnum2ptr210012ff7812ff785016int x,*ptr_x,*ptr_y;ptr_x=&x;ptr_y = ptr_x; 指針賦值運(yùn)算 . P156-P159100 xFF7Cptr_xptr_yFF7CFF7Cint a5,*pa;pa=a; a0a1a2a3a42343115046paFE60FE64FE

9、68FE6CFE70FE6017練習(xí)1. 1. 若有說(shuō)明語(yǔ)句若有說(shuō)明語(yǔ)句:double :double * *p,a;p,a;則能通過(guò)則能通過(guò)scanfscanf語(yǔ)句正確給輸入語(yǔ)句正確給輸入項(xiàng)讀入數(shù)據(jù)的程序段是項(xiàng)讀入數(shù)據(jù)的程序段是( )( )A.A.* *p=&a;scanf(p=&a;scanf(“%lf%lf”,p); B.,p); B.* *p=&a;scanf(p=&a;scanf(“%f%f”,p);,p);C.p=&a;scanf(C.p=&a;scanf(“%lf%lf”, ,* *p); D.p=&a;scanf(p);

10、D.p=&a;scanf(“%lf%lf”,p);,p);D2. 2. 若有定義若有定義:int x=0,:int x=0,* *p=&x;p=&x;則語(yǔ)句則語(yǔ)句printf(printf(“%dn%dn”, ,* *p);p);的輸出的輸出結(jié)果是結(jié)果是()()A.A.隨機(jī)值隨機(jī)值 B.0 C.xB.0 C.x的地址的地址 D.pD.p的地址的地址B18練習(xí)3 3. . 設(shè)有定義設(shè)有定義:int n1=0,n2,:int n1=0,n2,* *p=&n2,p=&n2,* *q=&n1;q=&n1;以下賦值語(yǔ)句中與以下賦值語(yǔ)句中與n2=n1

11、;n2=n1;語(yǔ)句等價(jià)的是語(yǔ)句等價(jià)的是()()A.A.* *p=p=* *q; B.p=q; C.q; B.p=q; C.* *p=&n1; D.p=p=&n1; D.p=* *q;q;A4 4. . 設(shè)已有定義設(shè)已有定義:float x;,:float x;,則以下對(duì)指針變量則以下對(duì)指針變量p p進(jìn)行定義且賦初值進(jìn)行定義且賦初值的語(yǔ)句中正確的是的語(yǔ)句中正確的是( )( )A.float A.float * *p=1024; B.int p=1024; B.int * *p=(float x);p=(float x);C.float p=&x; C.float p=&a

12、mp;x; D.float D.float * *p=&x;p=&x;D19int *ptrnum,arr_num8;ptrnum = &arr_num0;ptrnum+;指針?biāo)阈g(shù)運(yùn)算3-1 . P156-P159q使用遞增/遞減運(yùn)算符(+ 和 -)將指針遞增或遞減 內(nèi)存內(nèi)存arr_num0arr_num1arr_num2arr_num3arr_num4arr_num5arr_num6arr_num71023156041491339一個(gè)類型為 T 的指針的移動(dòng),以 sizeof(T)為移動(dòng)單位。 q指針自增p+/+p或自減p-/-pq意義指向下一個(gè)或前一個(gè)數(shù)據(jù)。q等價(jià)于

13、p+1或p-1q注意 前置或后置的區(qū)別前置或后置的區(qū)別 例 int a=1,2,3,*p=a; printf(“%d”,*p+); /輸出1 printf(“%d”,*+p); /輸出2 為什么?指針?biāo)阈g(shù)運(yùn)算3-2 . P156-P15921q將指針加上或者減去某個(gè)整數(shù)值ptrnum = &arr_num0;ptrnum = ptrnum + 4;printf(“%d”,*ptrnum);ptrnum = &arr_num5;ptrnum = ptrnum - 2 ;printf(“%d”,*ptrnum);指針?biāo)阈g(shù)運(yùn)算 3-3 . P156-P1594160內(nèi)存內(nèi)存 arr_

14、num0arr_num1arr_num2arr_num3arr_num4arr_num5arr_num6arr_num71023156041491339q指向同一種數(shù)據(jù)類型的兩個(gè)指針才能進(jìn)行關(guān)系運(yùn)算。值為1或0qp q p q p = qq不能與非指針類型變量進(jìn)行比較,但可與NULL(即0值)進(jìn)行等或不等的關(guān)系運(yùn)算q如: 判斷p是否為空指針P = NULLp != NULL指針關(guān)系運(yùn)算. P156-P15923比較兩個(gè)指針 #includevoid main ()int *ptrnum1, *ptrnum2; int value = 1;ptrnum1 = &value;value +

15、= 10;ptrnum2 = &value;if (ptrnum1 = ptrnum2)printf(n 兩個(gè)指針指向同一個(gè)地址n);elseprintf(n 兩個(gè)指針指向不同的地址n); 指針關(guān)系運(yùn)算. P156-P159課堂練習(xí)q有如下聲明:int a = 1;int *p = &a;請(qǐng)計(jì)算下列表達(dá)式的值,或者說(shuō)明其含義:*p *&a &*p +*p *p- (*p)-25 指向數(shù)組的指針.P159-P162q一個(gè)數(shù)組存儲(chǔ)在一塊連續(xù)內(nèi)存單元中;數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址;q第 (i + 1) 個(gè)數(shù)組元素的地址可表示為 &datai 或 (da

16、ta+i)。q可以通過(guò)以下方式為指向數(shù)組的指針賦值: int a10; pa=&a0; / 或者 pa=a;q一個(gè)指針變量可以指向一個(gè)數(shù)組元素 int *ptr,data10; ptr=data+3;/或者ptr=&data326指向數(shù)組的指針示例1#include void main()int data = 5, 10, 15, 20, 25;int i = 0;int *ptr;ptr = data;while(i 5)printf(“n 第 %d 個(gè)元素的存儲(chǔ)地址為:%x,值為: %dn“,i+1, ptr, *ptr);i+;ptr+; 內(nèi)存內(nèi)存data0data1da

17、ta2data3data451015202512ff6c12ff7012ff7412ff7812ff7c第第1個(gè)元素的存儲(chǔ)地址為:個(gè)元素的存儲(chǔ)地址為:12ff6c,值為:值為:5第第2個(gè)元素的存儲(chǔ)地址為:個(gè)元素的存儲(chǔ)地址為:12ff70,值為:值為:10第第3個(gè)元素的存儲(chǔ)地址為:個(gè)元素的存儲(chǔ)地址為:12ff74,值為:值為:15第第4個(gè)元素的存儲(chǔ)地址為:個(gè)元素的存儲(chǔ)地址為:12ff78,值為:值為:20第第5個(gè)元素的存儲(chǔ)地址為:個(gè)元素的存儲(chǔ)地址為:12ff7c,值為:值為:25ptrptrptrptrptr27指向數(shù)組的指針示例2void main() char name5 = M, A, D

18、, A, M; int flag = 1; char *start=name, *end=name+4; for(;start = end; start+, end-)if(*start != *end) flag = 0;break; if(flag)printf(n 該字符串是回文串n); else printf(n 該字符串不是回文串n); 內(nèi)存內(nèi)存name0name1name2name3name4MADAM該字符串是回文串該字符串是回文串startendstartendendstart課堂練習(xí)q閱讀程序,寫(xiě)出結(jié)果1)#include int main()int a3 = 77, 88,

19、 99 ;int i;for (i = 0; i 3; +i)printf(“%dn”, *(a + i);return 0;778899課堂練習(xí)q閱讀程序,寫(xiě)出結(jié)果2)#include int main()int a = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;int *p, *q;p = a;q = &a6;printf(“%dn”, (q p) / sizeof(a0);return 0;1課堂練習(xí)#include int main()int a10;int i = 0;int *p;p = ;for (i = 0; i 10; )scanf(“%d”, p+

20、); for ( ) printf(“%5d”, ); return 0;a或&a0i+p=&a0或p=afor (i = 0; i 10;i+)ai或*p+或*(p+i)或*(a+i)或piq下面程序的意圖是通過(guò)指針來(lái)輸入和輸出數(shù)組。請(qǐng)根據(jù)程序的上下文在橫線處填上缺失的語(yǔ)句或語(yǔ)句的缺失部分。1)#include int main()int a;int *p;double *q;scanf(“%d”, p);printf(“%dn”, *p);q = &a;if (p = q) printf(“In the same room.n”); else printf(“Sep

21、erated.n”);return 0;課堂練習(xí)q下面的程序存在語(yǔ)法和邏輯錯(cuò)誤,請(qǐng)指出并改正。p=&a;int *qp=q2)#include int main()int a = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ;int i;while (i = 10)printf(“%dn”, *a);+a;return 0;課堂練習(xí)i10printf(“%dn”, ai);+i;int *p;while(i10) printf(“%dn”, *p); +i;33指向字符串的指針.P162-P164q在C語(yǔ)言中,可以將字符指針指向字符串q被指向的字符串可以是一個(gè)常量字符串,

22、也可以是一個(gè)存儲(chǔ)著字符串的字符數(shù)組char *ptr = C Language; CLanguage0ptrchar *ps=“I like c program;int n=9;ps=ps+n;printf(%sn,ps);Ilike CProg ram0psprogram34指向字符串的指針.P162-P164char uname30=wahaha yiyiyaya;char *p;int count;count = 0;for (p = uname; *p != 0; p+)if (*p = a)count+;W ahahayiyiyaya0psunamecount0 5循環(huán)35指針變量作

23、為函數(shù)參數(shù).P168-P171q函數(shù)的參數(shù)不僅可以是整數(shù)、實(shí)型、字符型等數(shù)據(jù),還可以是指針類型,它的作用是將一個(gè)變量的地址傳遞到另一個(gè)函數(shù)中。示例:交換兩個(gè)變量的值示例:交換兩個(gè)變量的值36練習(xí)5 5. . 有以下程序有以下程序: :point(char point(char * *p)p) p+=3; p+=3; main()main() char b4= char b4=a a, ,b b, ,c c, ,d d,* *p=b;p=b; point(p); point(p); printf( printf(“%cn%cn”, ,* *p);p); 程序運(yùn)行后的輸出結(jié)果是程序運(yùn)行后的輸出結(jié)果

24、是()()A.a B.b C.c D.dA.a B.b C.c D.dA函數(shù)返回指針.P173-P174q大多數(shù)情況大多數(shù)情況,函數(shù)返回的都是一個(gè)簡(jiǎn)單類型的值函數(shù)返回的都是一個(gè)簡(jiǎn)單類型的值q而有時(shí),函數(shù)會(huì)產(chǎn)生一個(gè)數(shù)據(jù)對(duì)象而有時(shí),函數(shù)會(huì)產(chǎn)生一個(gè)數(shù)據(jù)對(duì)象(如數(shù)組、指(如數(shù)組、指針等),針等),并且希望將這個(gè)對(duì)象返回給調(diào)用者并且希望將這個(gè)對(duì)象返回給調(diào)用者q這時(shí)這時(shí),我們就可以讓函數(shù)返回一個(gè)指向這個(gè)數(shù)據(jù)對(duì)我們就可以讓函數(shù)返回一個(gè)指向這個(gè)數(shù)據(jù)對(duì)象的指針,而不是整個(gè)對(duì)象返回給調(diào)用者,那樣象的指針,而不是整個(gè)對(duì)象返回給調(diào)用者,那樣會(huì)引起內(nèi)存數(shù)據(jù)的復(fù)制。會(huì)引起內(nèi)存數(shù)據(jù)的復(fù)制。q格式:格式:類型類型 * *函數(shù)

25、名(形參列表)函數(shù)名(形參列表) 例子:例子:char * strchr(char ch, char *s);38結(jié)構(gòu)體簡(jiǎn)介存儲(chǔ)一個(gè)班級(jí)中 5 名學(xué)員的信息(學(xué)號(hào)、姓名、性別和成績(jī))問(wèn)題:I. 使用數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解決方案:scorenumsexname不能建立數(shù)組間的關(guān)系II. 使用多維數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564C 語(yǔ)言不允許一個(gè)數(shù)組包含多種數(shù)據(jù)類型III. 使用結(jié)構(gòu)numnamesexscoreC 語(yǔ)言引入了稱為結(jié)構(gòu)的數(shù)據(jù)存儲(chǔ)

26、方式“結(jié)構(gòu)” 是一種構(gòu)造數(shù)據(jù)類型,它是由若干數(shù)據(jù)項(xiàng)組合而成的復(fù)雜數(shù)據(jù)對(duì)象,這些數(shù)據(jù)項(xiàng)稱為結(jié)構(gòu)的成員。39 定義結(jié)構(gòu)2-1 .P184-P189struct structurenamedatatype variable1;datatype variable2;.;結(jié)構(gòu)成員;結(jié)構(gòu)名structstudentint num;char name20;char sex;定義結(jié)構(gòu)float score;C 語(yǔ)言中的有效數(shù)據(jù)類型40定義結(jié)構(gòu)2-2 .P184-P189struct student int num; char name20; char sex; float score;num name sex

27、student 結(jié)構(gòu)定義并不預(yù)留內(nèi)存 結(jié)構(gòu)定義放置在程序的開(kāi)始部分,位于頭文件聲明之后 score 結(jié)構(gòu)定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)變量。41聲明結(jié)構(gòu)變量.P184-P189聲明結(jié)構(gòu)變量struct student int num; char name20; char sex; float score;struct student student1,student2;I.先定義結(jié)構(gòu),再聲明結(jié)構(gòu)變量struct student int num; char name20; char sex; float score;student1,student2;II.在定

28、義結(jié)構(gòu)類型的同時(shí)聲明結(jié)構(gòu)變量struct int num; char name20; char sex; float score;student1,student2;III. 直接聲明結(jié)構(gòu)變量聲明一個(gè)類型為 student 結(jié)構(gòu)的變量,將會(huì)為該變量分配內(nèi)存,大小是大于或等于其所有成員變量的大小之和。 42內(nèi)存student3struct student student3=3,Yao Ming ,M,90.5; 結(jié)構(gòu)變量初始化.P184-P1893Yao MingM賦值的順序應(yīng)與成員聲明時(shí)的順序一樣;允許初始化語(yǔ)句中的值的數(shù)目比結(jié)構(gòu)成員數(shù)目少。s

29、tudent3.sex90.5student3.score43student1student1.num=1;=Zhang Zi Liang;student1.sex=M;printf(請(qǐng)輸入成績(jī):請(qǐng)輸入成績(jī):n);scanf(%f,&student1.score);結(jié)構(gòu)變量賦值.P184-P1891Zhang Zi Liang Mq 用輸入語(yǔ)句或賦值語(yǔ)句來(lái)給結(jié)構(gòu)變量的各個(gè)成員賦值7878student2 = student1; student21Zhang Zi Liang M7844問(wèn)題描述:根據(jù)學(xué)員的成績(jī),輸出不及格學(xué)員的詳細(xì)信息。 使用結(jié)構(gòu)示例#incl

30、udestruct studentint num;/學(xué)號(hào)char *name;/姓名char sex;/性別float score;/成績(jī);void main() static struct student stu1=1,李亞鵬,M,61; static struct student stu2=2,周晶晶,F,92.5; static struct student stu3=3,姚光明,M,59; printf(不及格學(xué)員的名單如下:n); if(stu1.score60) printf(%dt%st%ct%5.2fn,stu1.num,,stu1.sex,stu1.scor

31、e); if(stu2.score60) printf(%dt%st%ct%5.2fn,stu2.num,,stu2.sex,stu2.score); if(stu3.score=60 & stu2.score=60 & stu3.score=60) printf(沒(méi)有不及格的學(xué)員。n);不及格學(xué)員的名單如下:3 姚光明 M 59.00stu11李亞鵬M78stu22周晶晶F92stu33姚光明M5945struct student int num; char* name; char sex; float score;stu30;結(jié)構(gòu)數(shù)組.P189-P191q

32、 元素為結(jié)構(gòu)類型的數(shù)組稱為結(jié)構(gòu)數(shù)組。q 在實(shí)際應(yīng)用中,經(jīng)常用結(jié)構(gòu)數(shù)組來(lái)表示具有相同數(shù)據(jù)結(jié)構(gòu)的一個(gè)群體。例如一個(gè)班的學(xué)員檔案,一個(gè)公司的職工檔案等。定義了一個(gè)結(jié)構(gòu)數(shù)組stu1,共有30個(gè)元素,stu0stu29。每個(gè)數(shù)組元素都具有struct student的結(jié)構(gòu)形式。46問(wèn)題描述:求學(xué)員的總成績(jī)和平均成績(jī),并統(tǒng)計(jì)不及格人數(shù)。 結(jié)構(gòu)指針變量47struct stu *pstu;(*pstu).num 或者: pstu-num結(jié)構(gòu)指針變量.P191-P195q 一個(gè)指針當(dāng)用來(lái)指向一個(gè)結(jié)構(gòu)時(shí), 稱之為結(jié)構(gòu)指針變量。q 結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。q 結(jié)構(gòu)指針變量聲明的一般形式為:

33、struct 結(jié)構(gòu)名 *結(jié)構(gòu)指針變量名q 通過(guò)結(jié)構(gòu)指針可以訪問(wèn)該結(jié)構(gòu)變量的成員,一般形式為: (*結(jié)構(gòu)指針變量).成員名 或者 結(jié)構(gòu)指針變量-成員名 48結(jié)構(gòu)作為函數(shù)參數(shù).P198-P204q可以將結(jié)構(gòu)作為參數(shù)傳遞給函數(shù),也可以定義返回結(jié)構(gòu)值的函數(shù)。q結(jié)構(gòu)作為函數(shù)參數(shù)有三種不同方法:q將結(jié)構(gòu)成員的值傳遞給函數(shù)處理。q將整個(gè)結(jié)構(gòu)作為參數(shù)值傳遞給函數(shù)。q將結(jié)構(gòu)指針變量做函數(shù)的參數(shù)。把結(jié)構(gòu)作為整體來(lái)處理,但作用方式和效果不同。49結(jié)構(gòu)成員作為函數(shù)參數(shù)struct student char name25; char sex; int age;void display (char *, char * ,

34、 int *);void main() struct student stu; printf(請(qǐng)輸入學(xué)生的姓名); gets(); printf(學(xué)生性別: );getchar(); scanf(%c,&stu.sex); printf(n 請(qǐng)輸入學(xué)生年齡: ); scanf(%d,&stu.age); display(,&stu.sex,&stu.age);void display(char *n, char *s, int *a)printf(nt 學(xué)生的詳細(xì)信息n);printf(n 姓名: %s,n);printf(n 性

35、別: %c,*s);printf(n 年齡: %dn,*a);第一個(gè)參數(shù)為字符串,所以不使用“&”50問(wèn)題描述: 求已知兩個(gè)復(fù)數(shù)的和。分析: 兩個(gè)復(fù)數(shù)a+ib和c+id的和為: x+iy 其中:x=a+c y=b+d#includestruct complex double re;/實(shí)部 double im;/虛部;struct complex add(struct complex,struct complex);void main() struct complex x=6.5,8.9,y=7.1,9.4; struct complex z; z=add(x,y); printf(和為:%5.2lf+i%5.2lfn,z.re,z.im);整個(gè)結(jié)構(gòu)作為參數(shù) struct complex add(struct complex a,struct complex b)struct complex c;c.re=a.re+b.re;c.im=a.im+b.im;return c;傳遞結(jié)構(gòu)時(shí)不使用 “&”,所以實(shí)際上是傳值調(diào)用,即,將結(jié)構(gòu)變量的每個(gè)成員值逐個(gè)傳送。51結(jié)構(gòu)指針做為參數(shù) 用指針變量作函數(shù)參數(shù)進(jìn)行傳送時(shí)由實(shí)參傳向形參的只是結(jié)構(gòu)的地址

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論