溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C語(yǔ)言的結(jié)構(gòu)體是什么呢

發(fā)布時(shí)間:2021-10-14 16:16:42 來(lái)源:億速云 閱讀:119 作者:柒染 欄目:編程語(yǔ)言

C語(yǔ)言的結(jié)構(gòu)體是什么呢,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

1、概述

  C語(yǔ)言允許用戶(hù)自己指定這樣一種數(shù)據(jù)結(jié)構(gòu),它由不同類(lèi)型的數(shù)據(jù)組合成一個(gè)整體,以便引用,這些組合在一個(gè)整體中的數(shù)據(jù)是互相聯(lián)系的,這樣的數(shù)據(jù)結(jié)構(gòu)稱(chēng)為結(jié)構(gòu)體,它相當(dāng)于其它高級(jí)語(yǔ)言中記錄。

  聲明一個(gè)結(jié)構(gòu)休類(lèi)型的一般形式如下:

  struct結(jié)構(gòu)體名

  {成員列表};

  結(jié)構(gòu)體名,用作結(jié)構(gòu)體類(lèi)型的標(biāo)志,它又稱(chēng)結(jié)構(gòu)體標(biāo)記,大括號(hào)內(nèi)是該結(jié)構(gòu)體中的各個(gè)成員,由它們組成一個(gè)結(jié)構(gòu)體,對(duì)各成員都應(yīng)進(jìn)行類(lèi)型聲明如:

  類(lèi)型名成員名;

  也可以成員列表稱(chēng)為域表,第一個(gè)成員也稱(chēng)為結(jié)構(gòu)體中的一個(gè)域。成員名定名規(guī)則寫(xiě)變量名同。

  structstudent

  {

  intnum;

  charname[20];

  charsex;

  intage;

  floatscore;

  charaddr[30];

  };

2、定義結(jié)構(gòu)體類(lèi)型變量的方法

  前面只是指定了一個(gè)結(jié)構(gòu)體類(lèi)型,它相當(dāng)于一個(gè)模型,但其中并無(wú)具體數(shù)據(jù),系統(tǒng)對(duì)之也不分配實(shí)際內(nèi)存單元,為了能在程序中使用結(jié)構(gòu)類(lèi)型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類(lèi)型的變量,并在其中存放具體的數(shù)據(jù),可以采取以下3種方法定義結(jié)構(gòu)體類(lèi)型變量。

 ?。?)先聲明結(jié)構(gòu)體類(lèi)型再定義變量名

  如上面已定義了一個(gè)結(jié)構(gòu)體類(lèi)型structstudent,可以用它來(lái)定義變量。如:

  structstudent{//結(jié)構(gòu)體類(lèi)型名

  ...

  ...

  ...

  }student1,student2//結(jié)構(gòu)體變量名

  定義了student1,student2為structstudent類(lèi)型的變量。

  在定義了結(jié)構(gòu)體變量后,系統(tǒng)會(huì)為之分配內(nèi)存單元。例如student1和student2在內(nèi)存中各占59個(gè)字節(jié)。

  應(yīng)當(dāng)注意,將一個(gè)變量定義為標(biāo)準(zhǔn)類(lèi)型(基本數(shù)據(jù)類(lèi)型)與定義為結(jié)構(gòu)體類(lèi)型不同之處在于后者不僅要求指定變量為結(jié)構(gòu)體類(lèi)型,而且要求指定為某一特定的結(jié)構(gòu)體類(lèi)型(例如structstudent類(lèi)型),因?yàn)榭梢远x出許多種具體的結(jié)構(gòu)體類(lèi)型。而在定義變量為整形時(shí),只需指定為int型即可。

 ?。?)在聲明類(lèi)型的同時(shí)定義變量

  例如:

  structstudent

  {

  intnum;

  charname[20];

  charsex;

  intage;

  floatscore;

  charaddr[30];

  }student1,student2;

  它的作用與第一種方法相同,即定義了兩個(gè)structstudent類(lèi)型的變量student1,student2這種形式的定義的一般形式為

  struct結(jié)構(gòu)體名

  {

  成員表列

  }變量名表列;

 ?。?)直接定義結(jié)構(gòu)類(lèi)型變量

  其一般形式為:

  struct

  {

  成員表列

  }變量名表列;

  即不出現(xiàn)結(jié)構(gòu)體名。

  關(guān)于結(jié)構(gòu)體類(lèi)型,有幾點(diǎn)要說(shuō)明:

  a.類(lèi)型與變量是不同的概念,不是混同,只能對(duì)變量賦值,存取或運(yùn)算,而不能對(duì)一個(gè)類(lèi)型賦值,存取或運(yùn)算。在編譯時(shí),對(duì)類(lèi)型是不分配空間的,只對(duì)變量分配空間。

  b.對(duì)結(jié)構(gòu)體中的成員(即域)可以單元使用,它的作用與地位相當(dāng)于普通變量。

  c.成員也可以是一個(gè)結(jié)構(gòu)體變量。如:

  structdate//聲明一個(gè)結(jié)構(gòu)體類(lèi)型

  {

  intmonth;

  intday;

  intyear;

  }

  structstudent

  {

  intnum;

  charname[20];

  charsex;

  intage;

  structdatebirthday;

  charaddr[30];

  }student1,student2;

  先聲明一個(gè)structdate類(lèi)型,它代表日期包括3個(gè)成員month,day,year。然后在聲明structstudent類(lèi)型時(shí),將成員birthday指定為structdate類(lèi)型。

  d.成員名可以與程序中的變量名相同,二者不代表同一對(duì)象。

3、結(jié)構(gòu)體變量的引用

 ?。?)不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。

  只能對(duì)結(jié)構(gòu)體變量中的各個(gè)成員分別進(jìn)行輸入輸出。引用結(jié)構(gòu)體變量中的成員的方式為:

  結(jié)構(gòu)體變量名.成員名

  例如student1.num表示student1變量中的num成員,即student1的num項(xiàng),可以對(duì)變量的成員賦值。例如:student1.num=10010;

  .是成員(分量)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級(jí)最高,因此可以把student1.num作為一個(gè)整體來(lái)看待。上面的賦值語(yǔ)句作用是將整數(shù)10010賦給student1變量中的成員num。

 ?。?)如果成員本身又屬一個(gè)結(jié)構(gòu)體類(lèi)型,則要用若干個(gè)成員運(yùn)算符,一級(jí)一級(jí)地找到最低一級(jí)的成員。只能對(duì)最低的成員進(jìn)行賦值或存取以及運(yùn)算。

  例如:結(jié)構(gòu)體變量student1可以這樣訪問(wèn)各成員:

  student1.num

  student1.birthday.month

  注意,不能用student1.birthday來(lái)訪問(wèn)student1變量中的成員birthday,因?yàn)閎irthday本身是一個(gè)結(jié)構(gòu)體變量。

 ?。?)對(duì)結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算(根據(jù)其類(lèi)型決定可以進(jìn)行的運(yùn)算)。

  student2.score=student1.score;

  sum=student1.score+student2.score;

  student1.age++;

  ++student1.age;

  由于.運(yùn)算符的優(yōu)先級(jí)最高,因此student1.age++是對(duì)student1.age進(jìn)行自加運(yùn)算。而不是先對(duì)age進(jìn)行自加運(yùn)算。

 ?。?)可以引用結(jié)構(gòu)體變量成員的地址。也可以引用結(jié)構(gòu)體變量的地址。如:

  scanf("%d",&student1.num);//輸入student1.num的值

  printf("%o",&student1);//輸出student1的首地址

  但不能用以下語(yǔ)句整體讀入結(jié)構(gòu)體變量如:

  scanf("%d,%s,%c,%d,%f,%s",&student1);

  結(jié)構(gòu)體變量的地址主要用于作函數(shù)參數(shù),傳遞結(jié)構(gòu)體的地址。

4、結(jié)構(gòu)體變量的初始化

  和其它類(lèi)型變量一樣,對(duì)結(jié)構(gòu)體變量可以在定義時(shí)指定初始值。

  實(shí)例

  #include

  structstudent

  {

  longintnum;

  charname[20];

  charsex;

  charaddr[30];

  }a={89031,"LiLin",'M',"123BeijingRoad"};

  voidmain()

  {

  printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr);

  }

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI