天天看點

結構體

資料結構  最慢一星期一章   2015.10.5   一       20:33    

首先  我還不知道的一些基礎知識

結構體定義并不是定義一個變量,而是定義了一種資料類型,這種類型是你定義的,它可以和語言本身所自有的簡單資料類型一樣使用(如 int )

函數參數是什麼類型就傳什麼類型

/*

函數功能:定義一個結構體,在另一個函數中列印結構體成員的值;

函數形參為結構體變量的函數使用void qq(struct book cc);

*/

#include"stdio.h"

struct book     //定義一個名為book的結構體

{

 char name;

 int cose;

};

void qq(struct book cc);   //因為函數在主函數下面是以要聲明一下函數

void main()

struct book one;       //定義一個結構體名為book的結構體變量one

one.cose=25;

one.name=10;

 qq(one);

}

void qq(struct book cc)   //列印函數

 printf("%d \r\n",cc.cose);

 printf("%d \r\n",cc.name);

有沒有疑問為什麼void qq(struct book cc) 裡面的形參為struct book類型的參數,要和上面定義的結構體的類型一樣 -即struct book cc和struct book one; 

問一個問題如何把一個結構體的變量的成員的資訊copy到另一個結構體變量?

struct book cc;        //定義一個結構體名為book的結構體變量cc

one.cose=25; 

cc=one;       //把變量one的成員copy到變量cc中

printf("%d \r\n",cc.cose);

 }

結構體變量為數組的結構體struct book shu[20];    //20本書 

函數功能:結構體變量為數組的結構體

struct book       //書

 int price;     //書的價格

struct book shu[20];    //20本書 

shu[0].price=1;         //書0的價格

shu[1].price=2;         //書1的價格

shu[2].price=3;         //書2的價格

shu[3].price=4;         //書3的價格

 printf("%d \r\n",shu[0].price);

 printf("%d \r\n",shu[1].price);

 printf("%d \r\n",shu[2].price);

 printf("%d \r\n",shu[3].price);

如果不用數組呢

struct book shu0,shu1,shu2,shu3。。。。。。。;//麻煩

接着來

數組形參

數組有兩個特殊的性質。一是不能複制數組;二是使用數組名字時,數組會自動轉化為指向其第一個元素的指針。由于數組不能複制,是以無法編寫使用數組類型形參的函數,因為數組會被自動轉化為指針。

   數組形參是個容易出問題的地方。因為對于C/C++新手而言,最大的驚訝是C++中根本不存在所謂的“數組形參”,因為數組在傳入時,實質上隻傳入指向其首元素的指針。--來源于網絡

int aa[2]={0,1};

void test(int a[]); //形參為int*

 test(aa);

void test(int a[])

 printf("%d \r\n",a[0]);

 printf("%d \r\n",a[1]);

這種從數組到指針的自動轉換被賦予了一個迷人的技術術語:“退化”,即數組退化成指向其首元素的指針。順便提及,同樣的事情也發生在函數上。一個函數型參數會退化成一個指針。不過,和數組退化時丢失邊界不同,一個退化的函數具有良好的感覺能力,可以保持其參數類型和傳回類型。

由于在數組形參中數組邊界被忽略了,是以通常在聲明時最好将其省略。然而,如果函數期望接受一個指向一個元素序列(換句話說,就是數組)的指針作為參數,而不是指向單個對象的指針,那麼最好這樣聲明:

void test(int a[]); // 形參a仍然是一個int*-----來源于網絡

我也隻是記下了就這樣用,下面看結構體數組做函數參數

void qq(struct book cc[]);

 qq(shu);

void qq(struct book cc[])

 printf("%d \r\n",cc[0].price);

 printf("%d \r\n",cc[1].price);

 printf("%d \r\n",cc[2].price);

 printf("%d \r\n",cc[3].price);