資料結構 最慢一星期一章 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);