常用數(shù)據(jù)表達(dá)課件_第1頁(yè)
常用數(shù)據(jù)表達(dá)課件_第2頁(yè)
常用數(shù)據(jù)表達(dá)課件_第3頁(yè)
常用數(shù)據(jù)表達(dá)課件_第4頁(yè)
常用數(shù)據(jù)表達(dá)課件_第5頁(yè)
已閱讀5頁(yè),還剩87頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章常用數(shù)據(jù)表達(dá)

本章重點(diǎn):

常用的數(shù)據(jù)類型●

宏的定義與應(yīng)用●

數(shù)組的定義和使用●

指針的定義和使用●結(jié)構(gòu)體的定義●

枚舉與定義類型●

指針和數(shù)組●

返回值為指針的函數(shù)●指向函數(shù)的指針1第8章常用數(shù)據(jù)表達(dá)本章重點(diǎn):●枚舉與定義類型1基本數(shù)據(jù)類型類型基本類型

構(gòu)造類型指針類型空類型整型實(shí)型枚舉型字符型數(shù)組類型結(jié)構(gòu)體類型共用體類型雙精度單精度構(gòu)造類型數(shù)據(jù)是由基本類型數(shù)據(jù)按一定規(guī)則組成的,所以它們又被稱為“導(dǎo)出類型”。2基本數(shù)據(jù)類型類型基本類型構(gòu)造類型指針類型空類型整型實(shí)型枚舉為什么要有數(shù)組這么一個(gè)數(shù)據(jù)類型?數(shù)組與其他基本的數(shù)據(jù)類型有什么區(qū)別?8.1數(shù)組

3為什么要有數(shù)組這么一個(gè)數(shù)據(jù)類型?8.1數(shù)組3舉例:一個(gè)班有30個(gè)學(xué)生,求這30個(gè)學(xué)生的總成績(jī)和平均成績(jī)。分析:如果按照我們以前的知識(shí),涉及到30個(gè)學(xué)生的成績(jī),那么我們要定義30個(gè)變量來存儲(chǔ)成績(jī)信息。那么如果100個(gè)學(xué)生呢?是不是要定義100個(gè)變量?若有2萬在校生,那么學(xué)籍管理系統(tǒng)中是不是要定義2萬個(gè)變量?------不可能!

如何表示這么多學(xué)生的相關(guān)信息(例如成績(jī)),就要引入數(shù)組的概念,數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型??梢杂靡粋€(gè)統(tǒng)一的數(shù)組名和下標(biāo)來惟一的確定數(shù)組中的元素,利用循環(huán)來統(tǒng)一完成各個(gè)元素的各種操作。4舉例:一個(gè)班有30個(gè)學(xué)生,求這30個(gè)學(xué)生的總成績(jī)和平均成績(jī)。數(shù)組具有如下主要特點(diǎn):(1)每個(gè)數(shù)組中的元素類型必須一致。(2)用不同的下標(biāo)來區(qū)分?jǐn)?shù)組的元素。(3)數(shù)組在內(nèi)存中占有連續(xù)的存儲(chǔ)單元,數(shù)組名表示數(shù)組在內(nèi)存中的首地址。(4)數(shù)組和指針有著極密切的聯(lián)系,可以通過指針移動(dòng)來對(duì)數(shù)組元素進(jìn)行操作。5數(shù)組具有如下主要特點(diǎn):5#include<stdio.h>intmain(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};

/*定義一個(gè)整型數(shù)組,數(shù)組名為a,并給數(shù)組初始化*/for(i=0;i<10;i++)printf("a[%d]=%-2d",i,a[i]);

/*a[i]為數(shù)組的第i個(gè)元素*/printf("\n");return0;}例8.1數(shù)組及數(shù)組元素的表示方法

。6#include<stdio.h>例8.1數(shù)組及數(shù)組元素的一、一維數(shù)組定義

1.定義形式:

數(shù)據(jù)類型數(shù)組名[元素個(gè)數(shù)];

如:inta[5];不能寫成inta(5);

8.1.1一維數(shù)組2.注意:

①數(shù)組名由用戶定義,規(guī)則與變量名相同,②元素個(gè)數(shù)為常量表達(dá)式而不能是變量表達(dá)式。如:intn=5;inta[n];③數(shù)組的下標(biāo)從0開始。如:a[10]下標(biāo)是從0—9,而不是1--10。下標(biāo)可以是整型常量或整型常量表達(dá)式④和其他變量一樣,數(shù)組也必須先定義后使用。7一、一維數(shù)組定義8.1.1一維數(shù)組2.注意:二、一維數(shù)組的引用、初始化與賦值C語(yǔ)言規(guī)定不能一次引用整個(gè)數(shù)組,引用時(shí)只能對(duì)逐個(gè)元素進(jìn)行引用。(1)一維數(shù)組引用:引用形式:數(shù)組名[下標(biāo)]注意:對(duì)下標(biāo)的使用不要超過下標(biāo)的最大值。盡管超過最大值時(shí)不出現(xiàn)編譯錯(cuò)誤。但是運(yùn)行的時(shí)候會(huì)出現(xiàn)雜亂的結(jié)果。例如:a[0]=8;a[2]=0;a[3]=2*a[2];

8二、一維數(shù)組的引用、初始化與賦值8(2)一維數(shù)組賦值如何給一維數(shù)組賦值呢?可以有三種方法:①數(shù)組的初始化②程序中賦值③鍵盤中讀入數(shù)組的初始化

在定義數(shù)組時(shí)對(duì)數(shù)組元素可賦以初值。例如:staticinta[10]={0,1,2,3,4,5,6,7,8,9};

初始化時(shí)可以只對(duì)一部分元素賦初值。例如:

inta[10]={0,1,2,3,4};

如果想使一個(gè)數(shù)組的元素值全部為0.例如:

staticinta[10]={0};

在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。例如:inta[]={1,0,3,5,7};

9(2)一維數(shù)組賦值9程序中給數(shù)組的元素賦值。例8.2程序中給數(shù)組的元素賦值,并輸出數(shù)組元素的值。

#include<stdio.h>intmain(){ints[10]={1,2,3,4,5,6,7,8,9,10};/*定義數(shù)組s,并初始化*/inti=2,a[3];/*定義數(shù)組a*/a[0]=s[i];/*為數(shù)組元素a[0]賦值*/a[1]=s[2+i];a[2]=s[2*i+3];printf("a[0]=%da[1]=%da[2]=%d\n",a[0],a[1],a[2]);return0;}程序執(zhí)行結(jié)果:10程序中給數(shù)組的元素賦值。程序執(zhí)行結(jié)果:10程序運(yùn)行時(shí)從鍵盤輸入

例8.3程序運(yùn)行時(shí)從鍵盤輸入,給數(shù)組的元素賦值,最后輸出數(shù)組元素的值。

#include<stdio.h>voidmain(){inti,a[10];printf("請(qǐng)輸入10個(gè)整型數(shù),以空格隔開\n");for(i=0;i<10;i++)/*輸入10個(gè)數(shù),分別賦予10個(gè)元素*/scanf("%d",&a[i]);printf("輸入的數(shù)組為:");for(i=0;i<10;i++)/*輸入10個(gè)元素值*/printf("a[%d]=%-4d",i,a[i]);printf("\n");}11程序運(yùn)行時(shí)從鍵盤輸入例8.3程序運(yùn)行時(shí)從鍵盤輸入,給數(shù)組的C語(yǔ)言本身沒有字符串類型,字符串的存儲(chǔ)完全依賴于字符數(shù)組,但字符數(shù)組又不等于字符串。雖然C語(yǔ)言中沒有字符串?dāng)?shù)據(jù)類型,但卻允許使用字符串常量。在C語(yǔ)言中,字符串是借助于字符型一維數(shù)組來存放的,以字符‘\0’作為字符串結(jié)束標(biāo)志,它的ASCII代碼值為0,‘\0’占用存儲(chǔ)空間、不輸出,也不計(jì)入串的實(shí)際長(zhǎng)度。用字符數(shù)租存放字符串。8.1.2字符數(shù)組12C語(yǔ)言本身沒有字符串類型,字符串的存儲(chǔ)完全依賴于字符數(shù)組,但charc[10];c[0]=‘I’;c[1]=‘’;c[2]=‘a(chǎn)’;c[3]=‘m’;c[4]=‘’;c[5]=‘h’;[6]=‘a(chǎn)’;c[7]=‘p’;c[8]=‘p’;c[9]=‘y’;字符數(shù)組的定義 字符數(shù)組的定義方法與普通的數(shù)組的定義方法類似。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]Iamhappy13charc[10];字符數(shù)組的定義a[0]a[1]字符數(shù)組的輸入輸出有下列方法:(1)逐個(gè)字符輸入輸出。用格式符"%c"輸入或輸出一個(gè)字符。(2)將整個(gè)字符串一次輸入或輸出。用格式符“%s”,對(duì)字符串進(jìn)行輸入輸出。(3)用gets()輸入字符串,用puts()輸出字符串。14字符數(shù)組的輸入輸出有下列方法:14例8.4利用字符數(shù)組,在終端中輸出字符串“ILoveChina!”。分析:初始化數(shù)組string[],在初始化時(shí)直接用字符串常量,給字符數(shù)組string[]賦值。#include<stdio.h>intmain(){charstring[]=“ILoveChina!”;/*定義數(shù)組并初始化*/printf(“%s\n”,string);/*字符串輸出*/return0;}程序執(zhí)行結(jié)果:15例8.4利用字符數(shù)組,在終端中輸出字符串“ILove例8.5輸入一行字符,統(tǒng)計(jì)其中字母、數(shù)字、空格和其它字符的個(gè)數(shù),并輸出結(jié)果。分析:用函數(shù)gets()輸入字符串,字符個(gè)數(shù)小于等于80(因?yàn)閿?shù)組長(zhǎng)度為80)。用gets()函數(shù)輸入字符,可以輸入空格,若用scanf()函數(shù)輸入字符,遇到空格時(shí)系統(tǒng)認(rèn)為字符串結(jié)束。設(shè)整型變量letter,digit,space,other分別存放字母、數(shù)字、空格和其他字符的個(gè)數(shù),其初始值均為0。在循環(huán)中判斷數(shù)組中的每個(gè)字符是字母(則letter++)?還是數(shù)字(則digit++)?還是空格(則space++)?還是其他字符(則other++)?16例8.5輸入一行字符,統(tǒng)計(jì)其中字母、數(shù)字、空格和其它字符的#include<stdio.h>voidmain(){charstr[80];intletter=0,digit=0,space=0,other=0,i,length=0;

gets(str);

/*輸入若干字符*/

for(i=0;str[i]!='\0';i++)/*判斷字符是什么*/{if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') letter++; else if(str[i]>='0'&&str[i]<='9')digit++; else if(str[i]=='')space++; elseother++;}printf("letter:%ddigit:%dspace:%dother:%d\n",letter,digit,space,other);}17#include<stdio.h>178.1.3二維數(shù)組在C語(yǔ)言中,可以把二維數(shù)組看作是一種特殊的一維數(shù)組。二維數(shù)組中元素的排列順序是:先按行存放,再按列存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。

188.1.3二維數(shù)組在C語(yǔ)言中,可以把二維數(shù)組看一、二維數(shù)組的定義定義格式:類型數(shù)組名[行數(shù)][列數(shù)];(1)如:inta[2][3];(2)在內(nèi)存中,是按行存放的。(3)因?yàn)閿?shù)組的存儲(chǔ)是順序的,所以,各個(gè)元素的存儲(chǔ)順序?yàn)椋?/p>

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]255914218300行:

a[0][0]a[0][1]a[0][2]1行:

a[1][0]a[1][1]a[1][2]19一、二維數(shù)組的定義255914218300行:三、二維數(shù)組元素的初始化

1.按行給二維數(shù)組賦初值。如:intaa[2][3]={{0,0,1},{1,0,0}};2.也可以把數(shù)值寫在一塊:intaa[2][3]={0,0,1,1,0,0}則aa[0][0]=0aa[0][1]=0aa[0][2]=1aa[1][0]=1aa[1][1]=0aa[1][2]=0

二、二維數(shù)組元素的引用行號(hào)和列號(hào)都是從0開始的,并注意行號(hào)和列號(hào)不要超過數(shù)組定義的范圍。20三、二維數(shù)組元素的初始化1.按行給二維數(shù)組賦初值。3.如果初始化值比數(shù)組元素少,則后面的元素值為0,如:inta[4][5]={{1,2},{},{0,1,3}}則各值為: 1200000000 01300 000004.可以對(duì)單個(gè)元素進(jìn)行賦值:aa[3][4]=5;213.如果初始化值比數(shù)組元素少,則后面的元素值為0,215.如果對(duì)二維數(shù)組的所有元素都賦值,則數(shù)組的第一維可以省略。如: intm[][3]={1,2,3,4,5,6,7,8,9};則默認(rèn)的第一維的值是3又如 intm[][3]={1,2,3,4,5,6,7};則默認(rèn)的第一維的值也是3;其中 m[2][1]=m[2][2]=0;225.如果對(duì)二維數(shù)組的所有元素都賦值,則數(shù)組的第一維可以省略例8.6二維數(shù)組輸入、輸出的例子。

#include<stdio.h>intmain(){inti,j,a[4][3];printf("請(qǐng)輸入12個(gè)整型數(shù),以空格隔開\n");for(i=0;i<4;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);printf("輸入的數(shù)組為:\n");for(i=0;i<4;i++){for(j=0;j<3;j++)printf("a[%d][%d]=%-4d",i,j,a[i][j]);printf("\n");}}23例8.6二維數(shù)組輸入、輸出的例子。#include<st例8.7二維數(shù)組程序舉例對(duì)以下矩陣進(jìn)行轉(zhuǎn)置:2341591356782671410111237111513141516481216

說明:該矩陣是對(duì)稱矩陣,主對(duì)角線上下元素可以直接交換。若是非對(duì)稱矩陣,可以利用兩個(gè)二維數(shù)組進(jìn)行存儲(chǔ)原矩陣和轉(zhuǎn)置矩陣。24例8.7二維數(shù)組程序舉例對(duì)以下矩陣進(jìn)行轉(zhuǎn)置:24#include<stdio.h>voidmain(){inti,j,t;inta[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};printf("矩陣轉(zhuǎn)置前:\n");for(i=0;i<4;i++)/*輸出矩陣*/{ for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n");}printf("\n矩陣轉(zhuǎn)置后:\n\n");for(i=0;i<4;i++)/*矩陣轉(zhuǎn)置*/ for(j=0;j<4;j++) if(i<=j){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}/*交換元素*/for(i=0;i<4;i++)/*輸出矩陣*/{ for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n");}}25#include<stdio.h>258.3指針指針C語(yǔ)言的特色,指針用來存放內(nèi)存地址,也稱為指針變量。利用指針可以存放變量的地址、數(shù)組的地址、函數(shù)的起始地址等,利用指針可以很方便地處理數(shù)組、字符串。計(jì)算機(jī)的內(nèi)存是以字節(jié)為單位的連續(xù)存儲(chǔ)空間,每一字節(jié)單元都有一個(gè)編號(hào),該編號(hào)被稱為地址,這個(gè)地址就像房間號(hào)一樣。在程序中定義的變量,在內(nèi)存中都代表某一地址。268.3指針指針C語(yǔ)言的特色,指針用來存放內(nèi)存地址8.3.1指針變量的定義與賦值(一)指針變量的定義一般形式:類型名*指針變量名;例如:intx,*p1,*p2;

標(biāo)志命名規(guī)則同變量名(二)指針變量的賦值可以初始化:類型名*指針變量名=初值表達(dá)式;例如:int*px=&x;也可以賦值,例如:intx,*p1,*p2;p1=&x;278.3.1指針變量的定義與賦值(一)指針變量的定義標(biāo)志命#include<stdio.h>intmain(){intx;int*p;/*定義一個(gè)指針變量p*/p=&x;/*讓指針變量p指向x的地址*/scanf("%d",&x);/*鍵盤中讀入賦值給變量x*/printf("x=%d\n",*p);/*輸出指針變量p所指的地址上的內(nèi)容*/return0;}例8.8從鍵盤輸入一個(gè)數(shù),賦給一個(gè)普通變量,利用指針變量,輸出普通變量的值。指針運(yùn)算符28#include<stdio.h>例8.8從鍵盤輸入一個(gè)例8.9指針變量的定義與相關(guān)運(yùn)算示例。

#include<stdio.h>voidmain(){intn=12,*pn;/*定義一個(gè)指向int型數(shù)據(jù)的指針變量pn*/

floatf=3.14,*pf;/*定義一個(gè)指向float型數(shù)據(jù)的指針變量pf*/

charch=’p’,*pc;/*定義一個(gè)指向char型數(shù)據(jù)的指針變量pc*/

pi=&n; /*取變量n的地址,賦值給指針變量pi*/

pf=&f; /*取變量f的地址,賦值給指針變量pf*/

pc=&ch; /*取變量ch的地址,賦值指針變量給pc*/

printf(“n=%d,*pn=%d\n”,n,*pn);

printf(“f=%f,*pf=%f\n”,f,pf);

printf(“ch=%c,*pc=%c\n”,ch,*pc);

}程序運(yùn)行結(jié)果:n=12,*pn=12f=3.14,*pf=3.14ch=p,*pc=p29例8.9指針變量的定義與相關(guān)運(yùn)算示例。

#include<存取變量x值的方式有兩種:(1)直接訪問──直接利用變量的地址進(jìn)行存取scanf(“%d”,&x);的執(zhí)行過程是這樣的:用變量名x作為索引值,找到變量x的起始地址;然后將鍵盤輸入的值(假設(shè)為3)送到內(nèi)存單元中。printf(“x=%d\n",x);的執(zhí)行過程,與scanf()很相似:

首先找到變量x的起始地址,然后從其地址中取出其值,最后將它輸出。(2)間接訪問──通過另一變量訪問該變量的值

C語(yǔ)言規(guī)定:在程序中可以定義一種特殊的變量(稱為指針變量),用來存放其它同類型變量的地址。

intx=8,*p1;/*定義變量x,指針變量p1*/

p1=&x;/*指針變量賦值*/printf(“%d,%d”,x,*p1);/*輸出*/30存取變量x值的方式有兩種:308.3.2指針變量的運(yùn)算1.取地址運(yùn)算(&)取地址運(yùn)算的格式:&變量注意:指針變量只能存放指針(地址),且只能是相同類型變量的地址。2.指針運(yùn)算符(*)也稱間接訪問運(yùn)算符。用“*”可以訪問指針變量所指向的變量的值。例如:printf(“n=%d,*pi=%d\n”,n,*pi);注意:指針標(biāo)識(shí)符和指針運(yùn)算符的區(qū)別。在定義指針變量時(shí)出現(xiàn)的指針變量名前的“*”是一個(gè)標(biāo)志,而在其余場(chǎng)合出現(xiàn)的“*”是運(yùn)算符。318.3.2指針變量的運(yùn)算1.取地址運(yùn)算(&)31例8.10使用指針變量輸入2個(gè)整數(shù),按升序(從小到大排序)輸出。#include<stdio.h>voidmain(){intn1,n2;int*p1=&n1,*p2=&n2,*p;printf(“輸入第一個(gè)數(shù):”);scanf(“%d”,p1);printf(“輸入第二個(gè)數(shù):”);scanf(“%d”,p2);printf(“n1=%d,n2=%d\n”,n1,n2);if(*p1>*p2)/*如果n1>n2,則交換指針值*/{p=p1;p1=p2;p2=p;}printf(“min=%d,max=%d\n”,*p1,*p2);} 程序執(zhí)行結(jié)果:輸入第一個(gè)數(shù):8↙輸入第二個(gè)數(shù):2↙min=2,max=832例8.10使用指針變量輸入2個(gè)整數(shù),按升序(從小到大排序)4.指針運(yùn)算(1)賦值運(yùn)算例如:intn,*p1,*p2;p1=&n;p2=p1;(2)加或減一個(gè)整型數(shù)的運(yùn)算(p1++、p1--、p1+n)p1++;是指p1指向下一個(gè)整型變量(3)在一定條件下,兩個(gè)指針可以相減

當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),兩個(gè)指針變量值之差是指兩個(gè)指針之間的元素個(gè)數(shù)。(4)在一定條件下,兩個(gè)指針可以比較當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),可以進(jìn)行比較。指向前面元素的指針小于指向后面元素的指針。

若兩指針不指向同一數(shù)組,則兩指針相減或比較均無意義。將一變量的地址賦予指針變量將一指針變量的值賦予另一指針變量334.指針運(yùn)算將一變量的地址賦予指針變量將一指針變量的值賦予案例8.11指針運(yùn)算的實(shí)例。分析程序輸出的結(jié)果。#include<stdio.h>inta[]={4,2,7,9,3,5};/*定義全局?jǐn)?shù)組a*/main(){int*pa1,*pa2;pa1=&a[2];pa2=a+5;printf("%d\n",pa1+3==pa2);printf("%d,%d\n",pa2-pa1,(int)pa2-(int)pa1);printf("%d\n",*(++pa1));printf("%d\n",*(--pa2));}/*定義指針變量*//*指針變量賦值,使之指向數(shù)組*//*指針變量pa1加3并與pa2比較是否相等*//*指針pa2-pa1*//*指針變量加1,指向后面一個(gè)元素*//*指針變量減1,指向前面一個(gè)元素*/34案例8.11指針運(yùn)算的實(shí)例。分析程序輸出的結(jié)果。/*定8.3.3數(shù)組與指針(一)指向數(shù)組的指針數(shù)組的指針──數(shù)組在內(nèi)存中的起始地址數(shù)組元素的指針──數(shù)組元素在內(nèi)存中的起始地址。

1.指向數(shù)組的指針變量的定義指向數(shù)組的指針變量的定義,與指向普通變量的指針變量的定義方法一樣。例如:intarray[10],*pointer;pointer=array;/*或者pointer=&array[0];*/

注意:數(shù)組名代表數(shù)組在內(nèi)存中的起始地址(與第1個(gè)元素的地址相同),所以可以用數(shù)組名給指針變量賦值。358.3.3數(shù)組與指針(一)指向數(shù)組的指針數(shù)組的指針──數(shù)2.數(shù)組元素的引用數(shù)組元素的引用,既可用下標(biāo)法,也可用指針法。使用下標(biāo)法,直觀;而使用指針法,能使目標(biāo)程序占用內(nèi)存少、運(yùn)行速度快。

intarray[10],*pointer=array;則:(1)pointer+i和array+i都是數(shù)組元素array[i]的地址。(2)*(pointer+i)和*(array+i)就是數(shù)組元素array[i]。(3)指向數(shù)組的指針變量,也可將其看作是數(shù)組名,因而可按下標(biāo)法來使用。例如,pointer[i]等價(jià)于*(pointer+i)

注意:pointer+1指向數(shù)組的下一個(gè)元素,而不是簡(jiǎn)單地使指針變量pointer的值+1。362.數(shù)組元素的引用intarray[10],例8.12使用指向數(shù)組的指針變量來引用數(shù)組元素。#include<stdio.h>voidmain(){intarray[10],*pointer,i;

pointer=array;printf("Input10numbers:\n");for(i=0;i<10;i++)scanf("%d",pointer+i);/*用指針變量來輸入數(shù)組元素的值*/printf("array:");for(i=0;i<10;i++)printf("%d",*(pointer+i));/*用指針變量輸出數(shù)組元素的值*/printf("\n");}

37例8.12使用指向數(shù)組的指針變量來引用數(shù)組元素。37例8.13改寫例8.12用指針輸入輸出數(shù)據(jù)。分析下列程序,判斷是否有錯(cuò),若有錯(cuò),請(qǐng)找出錯(cuò)誤原因,并改正。#include<stdio.h>voidmain(){int*p,i,a[10];p=a;/*指針變量p指向數(shù)組a*/printf("Input10numbers:");for(i=0;i<10;i++)scanf("%d",p++);printf("\n");

for(i=0;i<10;i++,p++)printf("%d",*p);printf("\n");}38例8.13改寫例8.12用指針輸入輸出數(shù)據(jù)。分析下列程序字符串在內(nèi)存中的起始地址稱為字符串的指針,可以定義一個(gè)字符指針變量指向一個(gè)字符串。(一)字符串的表示與引用在C語(yǔ)言中,既可以用字符數(shù)組存放字符串,也可用字符指針變量來指向字符串;引用時(shí),既可以逐個(gè)字符引用,也可以整體引用。8.3.4字符串與指針39字符串在內(nèi)存中的起始地址稱為字符串的指針,可以1.逐個(gè)引用例8.14使用字符指針變量指向和引用字符串。#include<stdio.h>voidmain(){char*string="IloveBeijing.";

for(;*string!='\0';string++)printf("%c",*string);printf("\n");} 2.整體引用#include<stdio.h>voidmain(){char*string="IloveBeijing.";printf("%s\n",string);}

401.逐個(gè)引用2.整體引用403.字符指針變量與字符數(shù)組之比較雖然用字符指針變量和字符數(shù)組都能實(shí)現(xiàn)字符串的存儲(chǔ)和處理,但二者是有區(qū)別的,不能混為一談。(1)存儲(chǔ)內(nèi)容不同字符指針變量中存儲(chǔ)的是字符串的首地址,而字符數(shù)組中存儲(chǔ)的是字符串本身(數(shù)組的每個(gè)元素存放一個(gè)字符)。(2)賦值方式不同對(duì)字符指針變量,可采用下面的賦值語(yǔ)句賦值:

char*pointer;pointer=“Thisisaexample.”;/*合法用法*/而字符數(shù)組,雖然可以在定義時(shí)初始化,但不能用賦值語(yǔ)句整體賦值。下面的用法是非法的:chararray[20];array=“Thisisaexample.”;/*非法用法*/(3)指針變量的值是可以改變的,字符指針變量也不例外;而數(shù)組名代表數(shù)組的起始地址,是常量,而常量不能被改變。413.字符指針變量與字符數(shù)組之比較41

1.概念

數(shù)組的每個(gè)元素都是一個(gè)指針數(shù)據(jù)。指針數(shù)組比較適合用于指向多個(gè)字符串,使字符串處理更加方便、靈活。

2.定義格式

數(shù)據(jù)類型*數(shù)組名[指針元素個(gè)數(shù)];

例如:int*p[5];char*str[7];

8.3.5指針數(shù)組421.概念

數(shù)組的每個(gè)元素都是一#include<stdio.h>intmain(){char*name[]={"Liu","Fang","Zhang"};inti;for(i=0;i<3;i++)if(name[i][0]=='Z')printf("%s\n",name[i]);return0;}例8.15利用指針數(shù)組,根據(jù)代表姓名單詞的首字母,輸出這個(gè)姓名.指針數(shù)組定義并初始化name[0]Liuname[1]Fangname[2]Zhang43#include<stdio.h>例8.15利用指針數(shù)組8.3.6數(shù)組指針數(shù)組指針用于指向二維數(shù)組。數(shù)組指針變量定義的一般形式為:

類型說明符(*指針變量名)[下標(biāo)];例如:inta[2][3],(*p)[3];p=a;用*(p[i]+j)、*(*(p+i)+j)表示數(shù)組元素a[i][j]448.3.6數(shù)組指針數(shù)組指針用于指向二維數(shù)組例8.16利用數(shù)組指針,輸出一個(gè)二維數(shù)組。#include<stdio.h>intmain(){inta[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,j,(*p)[5];p=a;for(i=0;i<3;i++){ for(j=0;j<5;j++) printf("%d\t",*(*(p+i)+j)); printf("\n");}return0;}45例8.16利用數(shù)組指針,輸出一個(gè)二維數(shù)組。#includ作業(yè)與實(shí)驗(yàn)任務(wù)教材P122:一(先完成其中數(shù)組的題目,指針的題目以后再做)二(1,2,3)上機(jī)完成實(shí)驗(yàn)指導(dǎo)書P76:1,2,P85:4了解并掌握一維數(shù)組P89:五(1),(2),(3)46作業(yè)與實(shí)驗(yàn)任務(wù)教材P122:一(先完成其中數(shù)組的題目,指針第8章常用數(shù)據(jù)表達(dá)

本章重點(diǎn):

常用的數(shù)據(jù)類型●

宏的定義與應(yīng)用●

數(shù)組的定義和使用●

指針的定義和使用●結(jié)構(gòu)體的定義●

枚舉與定義類型●

指針和數(shù)組●

返回值為指針的函數(shù)●指向函數(shù)的指針47第8章常用數(shù)據(jù)表達(dá)本章重點(diǎn):●枚舉與定義類型1基本數(shù)據(jù)類型類型基本類型

構(gòu)造類型指針類型空類型整型實(shí)型枚舉型字符型數(shù)組類型結(jié)構(gòu)體類型共用體類型雙精度單精度構(gòu)造類型數(shù)據(jù)是由基本類型數(shù)據(jù)按一定規(guī)則組成的,所以它們又被稱為“導(dǎo)出類型”。48基本數(shù)據(jù)類型類型基本類型構(gòu)造類型指針類型空類型整型實(shí)型枚舉為什么要有數(shù)組這么一個(gè)數(shù)據(jù)類型?數(shù)組與其他基本的數(shù)據(jù)類型有什么區(qū)別?8.1數(shù)組

49為什么要有數(shù)組這么一個(gè)數(shù)據(jù)類型?8.1數(shù)組3舉例:一個(gè)班有30個(gè)學(xué)生,求這30個(gè)學(xué)生的總成績(jī)和平均成績(jī)。分析:如果按照我們以前的知識(shí),涉及到30個(gè)學(xué)生的成績(jī),那么我們要定義30個(gè)變量來存儲(chǔ)成績(jī)信息。那么如果100個(gè)學(xué)生呢?是不是要定義100個(gè)變量?若有2萬在校生,那么學(xué)籍管理系統(tǒng)中是不是要定義2萬個(gè)變量?------不可能!

如何表示這么多學(xué)生的相關(guān)信息(例如成績(jī)),就要引入數(shù)組的概念,數(shù)組是有序數(shù)據(jù)的集合。數(shù)組中的每一個(gè)元素都屬于同一個(gè)數(shù)據(jù)類型??梢杂靡粋€(gè)統(tǒng)一的數(shù)組名和下標(biāo)來惟一的確定數(shù)組中的元素,利用循環(huán)來統(tǒng)一完成各個(gè)元素的各種操作。50舉例:一個(gè)班有30個(gè)學(xué)生,求這30個(gè)學(xué)生的總成績(jī)和平均成績(jī)。數(shù)組具有如下主要特點(diǎn):(1)每個(gè)數(shù)組中的元素類型必須一致。(2)用不同的下標(biāo)來區(qū)分?jǐn)?shù)組的元素。(3)數(shù)組在內(nèi)存中占有連續(xù)的存儲(chǔ)單元,數(shù)組名表示數(shù)組在內(nèi)存中的首地址。(4)數(shù)組和指針有著極密切的聯(lián)系,可以通過指針移動(dòng)來對(duì)數(shù)組元素進(jìn)行操作。51數(shù)組具有如下主要特點(diǎn):5#include<stdio.h>intmain(){inti,a[10]={1,2,3,4,5,6,7,8,9,10};

/*定義一個(gè)整型數(shù)組,數(shù)組名為a,并給數(shù)組初始化*/for(i=0;i<10;i++)printf("a[%d]=%-2d",i,a[i]);

/*a[i]為數(shù)組的第i個(gè)元素*/printf("\n");return0;}例8.1數(shù)組及數(shù)組元素的表示方法

。52#include<stdio.h>例8.1數(shù)組及數(shù)組元素的一、一維數(shù)組定義

1.定義形式:

數(shù)據(jù)類型數(shù)組名[元素個(gè)數(shù)];

如:inta[5];不能寫成inta(5);

8.1.1一維數(shù)組2.注意:

①數(shù)組名由用戶定義,規(guī)則與變量名相同,②元素個(gè)數(shù)為常量表達(dá)式而不能是變量表達(dá)式。如:intn=5;inta[n];③數(shù)組的下標(biāo)從0開始。如:a[10]下標(biāo)是從0—9,而不是1--10。下標(biāo)可以是整型常量或整型常量表達(dá)式④和其他變量一樣,數(shù)組也必須先定義后使用。53一、一維數(shù)組定義8.1.1一維數(shù)組2.注意:二、一維數(shù)組的引用、初始化與賦值C語(yǔ)言規(guī)定不能一次引用整個(gè)數(shù)組,引用時(shí)只能對(duì)逐個(gè)元素進(jìn)行引用。(1)一維數(shù)組引用:引用形式:數(shù)組名[下標(biāo)]注意:對(duì)下標(biāo)的使用不要超過下標(biāo)的最大值。盡管超過最大值時(shí)不出現(xiàn)編譯錯(cuò)誤。但是運(yùn)行的時(shí)候會(huì)出現(xiàn)雜亂的結(jié)果。例如:a[0]=8;a[2]=0;a[3]=2*a[2];

54二、一維數(shù)組的引用、初始化與賦值8(2)一維數(shù)組賦值如何給一維數(shù)組賦值呢?可以有三種方法:①數(shù)組的初始化②程序中賦值③鍵盤中讀入數(shù)組的初始化

在定義數(shù)組時(shí)對(duì)數(shù)組元素可賦以初值。例如:staticinta[10]={0,1,2,3,4,5,6,7,8,9};

初始化時(shí)可以只對(duì)一部分元素賦初值。例如:

inta[10]={0,1,2,3,4};

如果想使一個(gè)數(shù)組的元素值全部為0.例如:

staticinta[10]={0};

在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。例如:inta[]={1,0,3,5,7};

55(2)一維數(shù)組賦值9程序中給數(shù)組的元素賦值。例8.2程序中給數(shù)組的元素賦值,并輸出數(shù)組元素的值。

#include<stdio.h>intmain(){ints[10]={1,2,3,4,5,6,7,8,9,10};/*定義數(shù)組s,并初始化*/inti=2,a[3];/*定義數(shù)組a*/a[0]=s[i];/*為數(shù)組元素a[0]賦值*/a[1]=s[2+i];a[2]=s[2*i+3];printf("a[0]=%da[1]=%da[2]=%d\n",a[0],a[1],a[2]);return0;}程序執(zhí)行結(jié)果:56程序中給數(shù)組的元素賦值。程序執(zhí)行結(jié)果:10程序運(yùn)行時(shí)從鍵盤輸入

例8.3程序運(yùn)行時(shí)從鍵盤輸入,給數(shù)組的元素賦值,最后輸出數(shù)組元素的值。

#include<stdio.h>voidmain(){inti,a[10];printf("請(qǐng)輸入10個(gè)整型數(shù),以空格隔開\n");for(i=0;i<10;i++)/*輸入10個(gè)數(shù),分別賦予10個(gè)元素*/scanf("%d",&a[i]);printf("輸入的數(shù)組為:");for(i=0;i<10;i++)/*輸入10個(gè)元素值*/printf("a[%d]=%-4d",i,a[i]);printf("\n");}57程序運(yùn)行時(shí)從鍵盤輸入例8.3程序運(yùn)行時(shí)從鍵盤輸入,給數(shù)組的C語(yǔ)言本身沒有字符串類型,字符串的存儲(chǔ)完全依賴于字符數(shù)組,但字符數(shù)組又不等于字符串。雖然C語(yǔ)言中沒有字符串?dāng)?shù)據(jù)類型,但卻允許使用字符串常量。在C語(yǔ)言中,字符串是借助于字符型一維數(shù)組來存放的,以字符‘\0’作為字符串結(jié)束標(biāo)志,它的ASCII代碼值為0,‘\0’占用存儲(chǔ)空間、不輸出,也不計(jì)入串的實(shí)際長(zhǎng)度。用字符數(shù)租存放字符串。8.1.2字符數(shù)組58C語(yǔ)言本身沒有字符串類型,字符串的存儲(chǔ)完全依賴于字符數(shù)組,但charc[10];c[0]=‘I’;c[1]=‘’;c[2]=‘a(chǎn)’;c[3]=‘m’;c[4]=‘’;c[5]=‘h’;[6]=‘a(chǎn)’;c[7]=‘p’;c[8]=‘p’;c[9]=‘y’;字符數(shù)組的定義 字符數(shù)組的定義方法與普通的數(shù)組的定義方法類似。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]Iamhappy59charc[10];字符數(shù)組的定義a[0]a[1]字符數(shù)組的輸入輸出有下列方法:(1)逐個(gè)字符輸入輸出。用格式符"%c"輸入或輸出一個(gè)字符。(2)將整個(gè)字符串一次輸入或輸出。用格式符“%s”,對(duì)字符串進(jìn)行輸入輸出。(3)用gets()輸入字符串,用puts()輸出字符串。60字符數(shù)組的輸入輸出有下列方法:14例8.4利用字符數(shù)組,在終端中輸出字符串“ILoveChina!”。分析:初始化數(shù)組string[],在初始化時(shí)直接用字符串常量,給字符數(shù)組string[]賦值。#include<stdio.h>intmain(){charstring[]=“ILoveChina!”;/*定義數(shù)組并初始化*/printf(“%s\n”,string);/*字符串輸出*/return0;}程序執(zhí)行結(jié)果:61例8.4利用字符數(shù)組,在終端中輸出字符串“ILove例8.5輸入一行字符,統(tǒng)計(jì)其中字母、數(shù)字、空格和其它字符的個(gè)數(shù),并輸出結(jié)果。分析:用函數(shù)gets()輸入字符串,字符個(gè)數(shù)小于等于80(因?yàn)閿?shù)組長(zhǎng)度為80)。用gets()函數(shù)輸入字符,可以輸入空格,若用scanf()函數(shù)輸入字符,遇到空格時(shí)系統(tǒng)認(rèn)為字符串結(jié)束。設(shè)整型變量letter,digit,space,other分別存放字母、數(shù)字、空格和其他字符的個(gè)數(shù),其初始值均為0。在循環(huán)中判斷數(shù)組中的每個(gè)字符是字母(則letter++)?還是數(shù)字(則digit++)?還是空格(則space++)?還是其他字符(則other++)?62例8.5輸入一行字符,統(tǒng)計(jì)其中字母、數(shù)字、空格和其它字符的#include<stdio.h>voidmain(){charstr[80];intletter=0,digit=0,space=0,other=0,i,length=0;

gets(str);

/*輸入若干字符*/

for(i=0;str[i]!='\0';i++)/*判斷字符是什么*/{if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') letter++; else if(str[i]>='0'&&str[i]<='9')digit++; else if(str[i]=='')space++; elseother++;}printf("letter:%ddigit:%dspace:%dother:%d\n",letter,digit,space,other);}63#include<stdio.h>178.1.3二維數(shù)組在C語(yǔ)言中,可以把二維數(shù)組看作是一種特殊的一維數(shù)組。二維數(shù)組中元素的排列順序是:先按行存放,再按列存放,即在內(nèi)存中先順序存放第一行的元素,再存放第二行的元素。

648.1.3二維數(shù)組在C語(yǔ)言中,可以把二維數(shù)組看一、二維數(shù)組的定義定義格式:類型數(shù)組名[行數(shù)][列數(shù)];(1)如:inta[2][3];(2)在內(nèi)存中,是按行存放的。(3)因?yàn)閿?shù)組的存儲(chǔ)是順序的,所以,各個(gè)元素的存儲(chǔ)順序?yàn)椋?/p>

a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]255914218300行:

a[0][0]a[0][1]a[0][2]1行:

a[1][0]a[1][1]a[1][2]65一、二維數(shù)組的定義255914218300行:三、二維數(shù)組元素的初始化

1.按行給二維數(shù)組賦初值。如:intaa[2][3]={{0,0,1},{1,0,0}};2.也可以把數(shù)值寫在一塊:intaa[2][3]={0,0,1,1,0,0}則aa[0][0]=0aa[0][1]=0aa[0][2]=1aa[1][0]=1aa[1][1]=0aa[1][2]=0

二、二維數(shù)組元素的引用行號(hào)和列號(hào)都是從0開始的,并注意行號(hào)和列號(hào)不要超過數(shù)組定義的范圍。66三、二維數(shù)組元素的初始化1.按行給二維數(shù)組賦初值。3.如果初始化值比數(shù)組元素少,則后面的元素值為0,如:inta[4][5]={{1,2},{},{0,1,3}}則各值為: 1200000000 01300 000004.可以對(duì)單個(gè)元素進(jìn)行賦值:aa[3][4]=5;673.如果初始化值比數(shù)組元素少,則后面的元素值為0,215.如果對(duì)二維數(shù)組的所有元素都賦值,則數(shù)組的第一維可以省略。如: intm[][3]={1,2,3,4,5,6,7,8,9};則默認(rèn)的第一維的值是3又如 intm[][3]={1,2,3,4,5,6,7};則默認(rèn)的第一維的值也是3;其中 m[2][1]=m[2][2]=0;685.如果對(duì)二維數(shù)組的所有元素都賦值,則數(shù)組的第一維可以省略例8.6二維數(shù)組輸入、輸出的例子。

#include<stdio.h>intmain(){inti,j,a[4][3];printf("請(qǐng)輸入12個(gè)整型數(shù),以空格隔開\n");for(i=0;i<4;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);printf("輸入的數(shù)組為:\n");for(i=0;i<4;i++){for(j=0;j<3;j++)printf("a[%d][%d]=%-4d",i,j,a[i][j]);printf("\n");}}69例8.6二維數(shù)組輸入、輸出的例子。#include<st例8.7二維數(shù)組程序舉例對(duì)以下矩陣進(jìn)行轉(zhuǎn)置:2341591356782671410111237111513141516481216

說明:該矩陣是對(duì)稱矩陣,主對(duì)角線上下元素可以直接交換。若是非對(duì)稱矩陣,可以利用兩個(gè)二維數(shù)組進(jìn)行存儲(chǔ)原矩陣和轉(zhuǎn)置矩陣。70例8.7二維數(shù)組程序舉例對(duì)以下矩陣進(jìn)行轉(zhuǎn)置:24#include<stdio.h>voidmain(){inti,j,t;inta[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};printf("矩陣轉(zhuǎn)置前:\n");for(i=0;i<4;i++)/*輸出矩陣*/{ for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n");}printf("\n矩陣轉(zhuǎn)置后:\n\n");for(i=0;i<4;i++)/*矩陣轉(zhuǎn)置*/ for(j=0;j<4;j++) if(i<=j){t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}/*交換元素*/for(i=0;i<4;i++)/*輸出矩陣*/{ for(j=0;j<4;j++) printf("%3d",a[i][j]); printf("\n");}}71#include<stdio.h>258.3指針指針C語(yǔ)言的特色,指針用來存放內(nèi)存地址,也稱為指針變量。利用指針可以存放變量的地址、數(shù)組的地址、函數(shù)的起始地址等,利用指針可以很方便地處理數(shù)組、字符串。計(jì)算機(jī)的內(nèi)存是以字節(jié)為單位的連續(xù)存儲(chǔ)空間,每一字節(jié)單元都有一個(gè)編號(hào),該編號(hào)被稱為地址,這個(gè)地址就像房間號(hào)一樣。在程序中定義的變量,在內(nèi)存中都代表某一地址。728.3指針指針C語(yǔ)言的特色,指針用來存放內(nèi)存地址8.3.1指針變量的定義與賦值(一)指針變量的定義一般形式:類型名*指針變量名;例如:intx,*p1,*p2;

標(biāo)志命名規(guī)則同變量名(二)指針變量的賦值可以初始化:類型名*指針變量名=初值表達(dá)式;例如:int*px=&x;也可以賦值,例如:intx,*p1,*p2;p1=&x;738.3.1指針變量的定義與賦值(一)指針變量的定義標(biāo)志命#include<stdio.h>intmain(){intx;int*p;/*定義一個(gè)指針變量p*/p=&x;/*讓指針變量p指向x的地址*/scanf("%d",&x);/*鍵盤中讀入賦值給變量x*/printf("x=%d\n",*p);/*輸出指針變量p所指的地址上的內(nèi)容*/return0;}例8.8從鍵盤輸入一個(gè)數(shù),賦給一個(gè)普通變量,利用指針變量,輸出普通變量的值。指針運(yùn)算符74#include<stdio.h>例8.8從鍵盤輸入一個(gè)例8.9指針變量的定義與相關(guān)運(yùn)算示例。

#include<stdio.h>voidmain(){intn=12,*pn;/*定義一個(gè)指向int型數(shù)據(jù)的指針變量pn*/

floatf=3.14,*pf;/*定義一個(gè)指向float型數(shù)據(jù)的指針變量pf*/

charch=’p’,*pc;/*定義一個(gè)指向char型數(shù)據(jù)的指針變量pc*/

pi=&n; /*取變量n的地址,賦值給指針變量pi*/

pf=&f; /*取變量f的地址,賦值給指針變量pf*/

pc=&ch; /*取變量ch的地址,賦值指針變量給pc*/

printf(“n=%d,*pn=%d\n”,n,*pn);

printf(“f=%f,*pf=%f\n”,f,pf);

printf(“ch=%c,*pc=%c\n”,ch,*pc);

}程序運(yùn)行結(jié)果:n=12,*pn=12f=3.14,*pf=3.14ch=p,*pc=p75例8.9指針變量的定義與相關(guān)運(yùn)算示例。

#include<存取變量x值的方式有兩種:(1)直接訪問──直接利用變量的地址進(jìn)行存取scanf(“%d”,&x);的執(zhí)行過程是這樣的:用變量名x作為索引值,找到變量x的起始地址;然后將鍵盤輸入的值(假設(shè)為3)送到內(nèi)存單元中。printf(“x=%d\n",x);的執(zhí)行過程,與scanf()很相似:

首先找到變量x的起始地址,然后從其地址中取出其值,最后將它輸出。(2)間接訪問──通過另一變量訪問該變量的值

C語(yǔ)言規(guī)定:在程序中可以定義一種特殊的變量(稱為指針變量),用來存放其它同類型變量的地址。

intx=8,*p1;/*定義變量x,指針變量p1*/

p1=&x;/*指針變量賦值*/printf(“%d,%d”,x,*p1);/*輸出*/76存取變量x值的方式有兩種:308.3.2指針變量的運(yùn)算1.取地址運(yùn)算(&)取地址運(yùn)算的格式:&變量注意:指針變量只能存放指針(地址),且只能是相同類型變量的地址。2.指針運(yùn)算符(*)也稱間接訪問運(yùn)算符。用“*”可以訪問指針變量所指向的變量的值。例如:printf(“n=%d,*pi=%d\n”,n,*pi);注意:指針標(biāo)識(shí)符和指針運(yùn)算符的區(qū)別。在定義指針變量時(shí)出現(xiàn)的指針變量名前的“*”是一個(gè)標(biāo)志,而在其余場(chǎng)合出現(xiàn)的“*”是運(yùn)算符。778.3.2指針變量的運(yùn)算1.取地址運(yùn)算(&)31例8.10使用指針變量輸入2個(gè)整數(shù),按升序(從小到大排序)輸出。#include<stdio.h>voidmain(){intn1,n2;int*p1=&n1,*p2=&n2,*p;printf(“輸入第一個(gè)數(shù):”);scanf(“%d”,p1);printf(“輸入第二個(gè)數(shù):”);scanf(“%d”,p2);printf(“n1=%d,n2=%d\n”,n1,n2);if(*p1>*p2)/*如果n1>n2,則交換指針值*/{p=p1;p1=p2;p2=p;}printf(“min=%d,max=%d\n”,*p1,*p2);} 程序執(zhí)行結(jié)果:輸入第一個(gè)數(shù):8↙輸入第二個(gè)數(shù):2↙min=2,max=878例8.10使用指針變量輸入2個(gè)整數(shù),按升序(從小到大排序)4.指針運(yùn)算(1)賦值運(yùn)算例如:intn,*p1,*p2;p1=&n;p2=p1;(2)加或減一個(gè)整型數(shù)的運(yùn)算(p1++、p1--、p1+n)p1++;是指p1指向下一個(gè)整型變量(3)在一定條件下,兩個(gè)指針可以相減

當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),兩個(gè)指針變量值之差是指兩個(gè)指針之間的元素個(gè)數(shù)。(4)在一定條件下,兩個(gè)指針可以比較當(dāng)兩個(gè)指針指向同一數(shù)組時(shí),可以進(jìn)行比較。指向前面元素的指針小于指向后面元素的指針。

若兩指針不指向同一數(shù)組,則兩指針相減或比較均無意義。將一變量的地址賦予指針變量將一指針變量的值賦予另一指針變量794.指針運(yùn)算將一變量的地址賦予指針變量將一指針變量的值賦予案例8.11指針運(yùn)算的實(shí)例。分析程序輸出的結(jié)果。#include<stdio.h>inta[]={4,2,7,9,3,5};/*定義全局?jǐn)?shù)組a*/main(){int*pa1,*pa2;pa1=&a[2];pa2=a+5;printf("%d\n",pa1+3==pa2);printf("%d,%d\n",pa2-pa1,(int)pa2-(int)pa1);printf("%d\n",*(++pa1));printf("%d\n",*(--pa2));}/*定義指針變量*//*指針變量賦值,使之指向數(shù)組*//*指針變量pa1加3并與pa2比較是否相等*//*指針pa2-pa1*//*指針變量加1,指向后面一個(gè)元素*//*指針變量減1,指向前面一個(gè)元素*/80案例8.11指針運(yùn)算的實(shí)例。分析程序輸出的結(jié)果。/*定8.3.3數(shù)組與指針(一)指向數(shù)組的指針數(shù)組的指針──數(shù)組在內(nèi)存中的起始地址數(shù)組元素的指針──數(shù)組元素在內(nèi)存中的起始地址。

1.指向數(shù)組的指針變量的定義指向數(shù)組的指針變量的定義,與指向普通變量的指針變量的定義方法一樣。例如:intarray[10],*pointer;pointer=array;/*或者pointer=&array[0];*/

注意:數(shù)組名代表數(shù)組在內(nèi)存中的起始地址(與第1個(gè)元素的地址相同),所以可以用數(shù)組名給指針變量賦值。818.3.3數(shù)組與指針(一)指向數(shù)組的指針數(shù)組的指針──數(shù)2.數(shù)組元素的引用數(shù)組元素的引用,既可用下標(biāo)法,也可用指針法。使用下標(biāo)法,直觀;而使用指針法,能使目標(biāo)程序占用內(nèi)存少、運(yùn)行速度快。

intarray[10],*pointer=array;則:(1)pointer+i和array+i都是數(shù)組元素array[i]的地址。(2)*(pointer+i)和*(array+i)就是數(shù)組元素array[i]。(3)指向數(shù)組的指針變量,也可將其看作是數(shù)組名,因而可按下標(biāo)法來使用。例如,pointer[i]等價(jià)于*(pointer+i)

注意:pointer+1指向數(shù)組的下一個(gè)元素,而不是簡(jiǎn)單地使指針變量pointer的值+1。822.數(shù)組元素的引用intarray[10],例8.12使用指向數(shù)組的指針變量來引用數(shù)組元素。#include<stdio.h>voidmain(){intarray[10],*pointer,i;

pointer=array;printf("Input10numbers:\n")

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論