小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

數(shù)組結(jié)構(gòu)體總結(jié)

 歪歪_yz 2013-08-16

數(shù)組

定義:數(shù)組是有序的并且具有相同類型的數(shù)據(jù)的集合。

一維數(shù)組

1、一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式];例如: int a[10]; 元素為a[0]----a[9].

2、常量表達(dá)式中不允許包含變量,可以包含常量或符號(hào)常量。

3、數(shù)組元素下標(biāo)可以是任何整型常量、整型變量或任何整型表達(dá)式。

4、可以對(duì)數(shù)組元素賦值,數(shù)組元素也可以參與運(yùn)算,與簡(jiǎn)單變量一樣使用。

5、使用數(shù)值型數(shù)組時(shí),不可以一次引用整個(gè)數(shù)組,只能逐個(gè)引用元素。

6、需要整體賦值時(shí)只可以在定義的同時(shí)整體賦值。如

   int a[10]={0,1,2,3,4,5,6,7,8,9};正確。

   int a[10];    a[10]={0,1,2,3,4,5,6,7,8,9};錯(cuò)誤。

或者用內(nèi)存拷貝函數(shù)

7、可以只給一部分元素賦值。例如:

   int a[10]={5,8,7,6};后面沒有賦值的元素值默認(rèn)為0。

8、對(duì)全部數(shù)組元素賦值時(shí)可以不指定數(shù)組長(zhǎng)度,例如:

   int a[10]={0,1,2,3,4,5,6,7,8,9};可以寫成 int a[]={0,1,2,3,4,5,6,7,8,9};

   但是,既不賦初值,也不指定長(zhǎng)度是錯(cuò)誤的。例如:int a[];錯(cuò)誤。

9、指向數(shù)組元素的指針

     int a[10], *p; 

//下面這兩句是等價(jià)的:
     p=&a[0]; 
     p=a; 
根據(jù)地址運(yùn)算規(guī)則, a+1為a[1]的地址, a+i就為a[i]的地址。 
    下面我們用指針給出數(shù)組元素的地址和內(nèi)容的幾種表示形式。 
    (1). p+i和a+i均表示a[i]的地址, 或者講, 它們均指向數(shù)組第i號(hào)元素, 即 
指向a[i]。 
    (2). *(p+i)和*(a+i)都表示p+i和a+i所指對(duì)象的內(nèi)容, 即為a[i]。 
    (3). 指向數(shù)組元素的指針, 也可以表示成數(shù)組的形式, 也就是說(shuō),  它允許 
指針變量帶下標(biāo), 如p[i]與*(p+i)等價(jià)。 

二維數(shù)組

1、一般形式:類型說(shuō)明符 數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];例如: 

   int a[3][4];可以看成是包含3個(gè)一維數(shù)組,每個(gè)一維數(shù)組里包含4個(gè)元素。一共3*4=12個(gè)元素。 

   所有元素為 a[0][0],a[0][1],a[0][2],a[0][3]

              a[1][0],a[1][1],a[1][2],a[1][3]

              a[2][0],a[2][1],a[2][2],a[2][3]

         ┏━━━━┓    ┏━┳━┳━┳━┓ 

 a─→  a[0]    ─→ 
         ┣━━━━┫    ┣━╋━╋━╋━┫ 
           a[1]    ─→ 
         ┣━━━━┫    ┣━╋━╋━╋━┫ 
           a[2]    ─→1011 
         ┗━━━━┛    ┗━┻━┻━┻━┛

a代表二維數(shù)組的首地址,  當(dāng)然也可看成是二維 數(shù)組第0行的首地址。a+1就代表第1行的首地址, a+2就代表第2行的首地址。如 果此二維數(shù)組的首地址為1000, 由于第0行有4個(gè)整型元素, 所以a+1為1008, a+2 
也就為1016(16位)。如下圖所示 
                            a[3][4] 
                     a    ┏━┳━┳━┳━┓ 
              (1000)─→ 
                    a+1  ┣━╋━╋━╋━┫ 
              (1008)─→ 
                    a+2  ┣━╋━╋━╋━┫ 
              (1016)─→1011 
                           ┗━┻━┻━┻━┛ 

2、與一維數(shù)組一樣元素下標(biāo)可以是是任何整型常量、整型變量或任何整型表達(dá)式。

3、需要整體賦值時(shí)只可以在定義的同時(shí)整體賦值。例如:

   int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正確。

   int a[3][4];  a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};錯(cuò)誤。

4、可以把所有數(shù)據(jù)寫在一個(gè)花括號(hào)內(nèi)。例如:

   int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正確。

5、可以只對(duì)部分元素賦值。例如:

   int a[3][4]={{1},{5},{9}};其余未賦值的元素默認(rèn)為0。

   int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}};

6、對(duì)全部數(shù)組元素賦值時(shí)可以省略第一維長(zhǎng)度,第二維不可以省略。例如:

   a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

   可以寫成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

   或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

7、在二維數(shù)組中, 我們還可用指針的形式來(lái)表示各元素的地址。

a[0]與*(a+0)等價(jià), a[1]與*(a+1)等價(jià), 因此a[i]+j就與*(a+i)+j等價(jià), 它 
表示數(shù)組元素a[i][j]的地址。 
 

因此, 二維數(shù)組元素a[i][j]可表示成*(a[i]+j)或*(*(a+i)+j),  它們都與 
a[i][j]等價(jià), 或者還可寫成(*(a+i))[j]。

字符數(shù)組

1、定義:char a[10];字符數(shù)組a長(zhǎng)度為10。每個(gè)元素只能存放一個(gè)字符。例如:

   a[0]='h';a[1]='a';a[2]='p';……

2、初始化:

   char a[]={'h','a','p','p','y'};注意,長(zhǎng)度為5

   char a[]="happy";

   char a[]={"happy"}; 注意,因?yàn)樽址Y(jié)尾自動(dòng)加'\0',所以char a[]="happy";長(zhǎng)度為6,不是5。

3、C語(yǔ)言中沒有字符串變量,字符串的輸入、存儲(chǔ)、處理和輸出等必須通過(guò)字符數(shù)組實(shí)現(xiàn)。  只能是數(shù)組指針都不行!

4、字符串的輸入。

   scanf();可以用%C逐個(gè)字符輸入比如char a[6];for(i=0;i<6;i++) scanf("%c",&a[i]);

           可以用%S以字符串的形式輸入,比如char a[6];scanf("%s",a);注意,a前不用加&,因?yàn)閍是數(shù)組名,已經(jīng)代表了數(shù)組首地址。

           注意:以%S輸入時(shí),以第一個(gè)非空白字符開始,終止于第一個(gè)空白字符。比如:輸入How are you時(shí)。只輸出How.

   gets();作用為輸入一個(gè)字符串。與scanf();功能一致,但空格和回車都存放在數(shù)組中,最后自動(dòng)加入‘\0’.不會(huì)出現(xiàn)上面輸出不全的情況。

         調(diào)用方式為:gets(數(shù)組名);需要包含頭文件“stdio.h”.

5、字符串的輸出。

    printf();可以使用%C逐個(gè)字符輸出,比如:char a[6];for(i=0;i<6;i++) printf("%c",a[i]);

           可以用%S以字符串的形式輸出,比如char a[6];printf("%s",a);

    puts();輸出一個(gè)字符串,結(jié)尾自動(dòng)換行。

         調(diào)用形式:puts(字符數(shù)組名或字符串常量);需包含頭文件“stdio.h”

常用字符串處理函數(shù)(以下函數(shù)需要頭文件“string.h”)

1、strlen()作用是測(cè)試字符串長(zhǎng)度。這里不包括‘\0’.使用形式strlen(數(shù)組名或字符串常量)

2、strcat()作用是連接兩個(gè)字符串。調(diào)用方式strcat(字符數(shù)組1名,字符數(shù)組2名);合并后的字符串存放在字符數(shù)組1中。

3、strcmp()比較兩個(gè)字符串是否相等。調(diào)用方式strcmp(字符串1,字符串2);相等時(shí)值為0。1>2時(shí)為正數(shù)。1<2時(shí)為負(fù)數(shù)。

4、strcpy()復(fù)制字符串。調(diào)用方式strcpy(字符數(shù)組1,字符串2);2的內(nèi)容復(fù)制到1中。1只能是字符數(shù)組名。

指針數(shù)組
1、定義int *p[10];//指針數(shù)組,含有10個(gè)指針元素
也就是說(shuō)每一個(gè)元素都是指針

2、初始化:

char *week_day[8]= 

{"sunday", 

"monday", 

"tuesday",

"wednesday", 

"thursday", 

"friday", 

"saturday", 

NULL 

}; /* 說(shuō)明指針數(shù)組。數(shù)組中的每個(gè)元素指向一個(gè)字符串 */ 

char *week_day[8];

數(shù)組必須指定大小,char *week_day[];是錯(cuò)誤的。

可以不指定數(shù)組大小

char * week_day []=

{"sunday", 

"monday", 

"tuesday",

"wednesday", 

"thursday", 

"friday", 

"saturday", 

NULL 

};

3、使用

int *p[10];

p[0]=”asdfghj”;

char *a=”asdfghjk”; 

p[1]=a;

4、指向結(jié)構(gòu)體的指針數(shù)組

 typedef struct { 

char s1[81]; 

char s2[81]; 

char s3[81]; 

} Rec; 

Rec *a[10];

a[0]=(Rec *)malloc(sizeof(Rec)); 

strcpy(a[0]->s1, "hello"); 

free(a[0]);

如右圖所示:

5、指向函數(shù)的指針數(shù)組

      int functionA(int event);

        int functionB(int event);

     …….

    int functionZ(int event);

  typdef  int (*pFunc)(int event);   // pFunc 是 int (*)(int event)的別名

  pFunc  functionlist[Z+1] =

functionA,

 functionB, 

…  ,

functionZ 

}; //指向函數(shù)名串的指針數(shù)組 

  使用:

functionlist[i](event);


數(shù)組指針

1、定義:

類型說(shuō)明符  (*指針變量名)[長(zhǎng)度]

注意“(*指針變量名)”兩邊的括號(hào)不可少。
int (*p)[10];//數(shù)組指針,這個(gè)指針能夠用來(lái)指向含有10個(gè)元素的整數(shù)數(shù)組

2、使用

int a[10], b[3][4],

p = &a;  注意,取一次地址地址相當(dāng)于加一級(jí)指針

p=b;

*p+1指向b[0][1], *(p+i)+j則指向數(shù)組元素b[i][j]。

結(jié)構(gòu)體數(shù)組

1、 結(jié)構(gòu)體數(shù)組的定義

   對(duì)應(yīng)結(jié)構(gòu)體變量定義方法1

struct student

{

 long num;

   char name[20];

char sex;

   char addr[20];

};

struct student students[3];

struct 

{

 long num;

   char name[20];

char sex;

   char addr[20];

} students[3];

2、結(jié)構(gòu)體數(shù)組的初始化

   初始化方法: 在定義數(shù)組的后面加上  ={初值列表}

struct 

{  long num;

         char name[20];

         char sex;

         char addr[20];

}   students[3]={ {10101, "Li Lin", 'M', "Beijing"},{10102, "zhang",  'F',  "shanghai"} ...};

3、使用

students [i].sex=‘F’;

 

數(shù)組作為函數(shù)參數(shù)

1、 數(shù)組元素作函數(shù)實(shí)參

數(shù)組元素作函數(shù)實(shí)參,與用變量作實(shí)參一樣,是“單向的值傳遞”。

參數(shù)和形參類型要保持一致。

Fun(a[2]);//傳遞的是元素a[2]的值。

2、 數(shù)組名作函數(shù)的實(shí)參和形參。

如:

main()

{int array[10];

   ……

 f(array,10);

……

}

 f(int arr[],int n);

     {    ……

}//注意sizeof(arr)值為4,此處只是傳遞數(shù)組的第一個(gè)元素的地址。

array為實(shí)參數(shù)組名,arr為形參數(shù)組名。數(shù)組名就是數(shù)組的首地址,實(shí)參向形參傳送數(shù)組名實(shí)際上就是傳送數(shù)組的地址,形參得到該地址后也指向同一數(shù)組。這就好象同一件物品有兩個(gè)彼此不同的名稱一樣。

    同樣,指針變量的值也是地址,數(shù)組指針變量的值即為數(shù)組的首地址,也可作為函數(shù)的參數(shù)使用。

用數(shù)組名作為函數(shù)參數(shù)時(shí)還應(yīng)注意以下幾點(diǎn):

a. 形參數(shù)組和實(shí)參數(shù)組的類型必須一致,否則將引起錯(cuò)誤。

b. 形參數(shù)組和實(shí)參數(shù)組的長(zhǎng)度可以不相同,因?yàn)樵谡{(diào)用時(shí),只傳送首地址而不檢查形參數(shù)組的長(zhǎng)度。當(dāng)形參數(shù)組的長(zhǎng)度與實(shí)參數(shù)組不一致時(shí),雖不至于出現(xiàn)語(yǔ)法錯(cuò)誤(編譯能通過(guò)),但程序執(zhí)行結(jié)果將與實(shí)際不符,這是應(yīng)予以注意的。

c. 在函數(shù)形參表中,允許不給出形參數(shù)組的長(zhǎng)度,或用一個(gè)變量來(lái)表示數(shù)組元素的個(gè)數(shù)。

例如,可以寫為:

void fun(int a[])

或?qū)憺?/span>

void fun(int a[],int n)

其中形參數(shù)組a沒有給出長(zhǎng)度,而由n值動(dòng)態(tài)地表示數(shù)組的長(zhǎng)度。n的值由主調(diào)函數(shù)的實(shí)參進(jìn)行傳送。

d. 多維數(shù)組也可以作為函數(shù)的參數(shù)。在函數(shù)定義時(shí)對(duì)形參數(shù)組可以指定每一維的長(zhǎng)度,也可省去第一維的長(zhǎng)度。因此,以下寫法都是合法的。

      int MA(int a[3][10])

int MA(int a[][10])。

而int  MA (int a[3][]);是不允許的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多