c語言定義結構體變數,C語言 定義結構體變數

2021-07-08 23:15:20 字數 5175 閱讀 5785

1樓:樂跑小子

首先,定義一個結構的一般形式為:

struct結構名

;成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為:“型別說明符 成員名;”。成員名的命名應符合識別符號的書寫規定。例如:

struct stu

;在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型陣列;第三個成員為***,字元型變數;第四個成員為score,浮點型變數。 應注意在括號後的分號是必不可少的。

然後,當結構定義完成後,即建立了一種資料型別,可以像int、float等內建型別一樣使用,以上面定義的stu結構體來和int型別對比著看。

int a;//定義一個int型別的變數a

stu a; //定義一個stu型別的變數a

int *p; //定義一個int型別的指標p

stu *p; //定義一個stu型別的指標p

int a[10];//定義一個int型別的陣列a,它有10個元素,每個元素是int型別

stu a[10];//定義一個stu型別的陣列a,它有10個元素,每個元素是stu型別。

2樓:

用typedef用來對結構體再定義一個型別名這種定義方法定義的結構體,應該這樣使用:

①struct s str;

②t str;

這兩種效果是一摸一樣的,你可以試試看,希望能幫到你。

3樓:福微瀾紹知

1.結構體型別資料的定義方法和引用方法

定義結構體:struct

結構體名

;定義結構體型別的變數:有三種形式

①定義型別時定義變數:struct

結構體型別名

變數名列表;

②直接定義結構型別變數:struct

變數名列表;

③由已定義的結構體型別來定義變數:struct

結構體型別名變數名列表;

引用結構體型別變數:在定義了結構體型別變數後,採用下列方法引用結構體型別的

變數:結構體變數名.成員名

這裡"."是成員(分量)運算子,它在所有的運算子中優先順序最高。

使用結構體時注意:

(1)結構體型別和結構體型別變數是不同的概念,定義結構體型別變數時應先定義

結構體型別,然後再定義變數屬於該型別。

(2)定義了—個結構體型別後,系統並沒有為所定義的各成員項分配相應的儲存空

間。只有定義了一個結構體型別變數,系統才為所定義的變數分配相應的儲存空間。結構

體型別變數佔用記憶體的位元組數是所有成員佔用記憶體長度之和。

(3)結構體成員的引用。如果一個結構體中又巢狀一個結構體,則要訪問一個成員

時,應採取外層向內層逐級訪問的方法。

求採納為滿意回答。

4樓:蠻梓柔大強

前面一個貌似少了一個

typedef,這樣a直接就是結構體變數

;後面一種是正確的,定義變數的時候需另外定義,structnodea;

c語言如何定義結構體變數

5樓:文化廚子

首先,定義一個結構的一般形式為:

struct結構名

;成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為:“型別說明符 成員名;”。成員名的命名應符合識別符號的書寫規定。例如:

struct stu

;在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型陣列;第三個成員為***,字元型變數;第四個成員為score,浮點型變數。 應注意在括號後的分號是必不可少的。

然後,當結構定義完成後,即建立了一種資料型別,可以像int、float等內建型別一樣使用,以上面定義的stu結構體來和int型別對比著看。

int a;//定義一個int型別的變數a

stu a; //定義一個stu型別的變數a

int *p; //定義一個int型別的指標p

stu *p; //定義一個stu型別的指標p

int a[10];//定義一個int型別的陣列a,它有10個元素,每個元素是int型別

stu a[10];//定義一個stu型別的陣列a,它有10個元素,每個元素是stu型別。

6樓:匿名使用者

typedef 能隱藏笨拙的語法構造以及平臺相關的資料型別,從而增強可移植性和以及未來的可維護性,例如typedef int am;這裡am形式就代表整型int,同樣在你的例子中:

typedef+

struct bmp_picture_typ+bmp_picture

是將結構體型別bmp_picture_typ用bmp_picture形式來代替,來隱藏笨拙的語法構造,之後是“,*bmp_picture_ptr”,注意前面有個逗號,說明與bmp_picture同等地位,不過多了個*,說明bmp_picture_ptr是表示bmp_picture_typ指標型別的形式,就像typedef int* bm,即用bm形式表示int*,而這裡的形式只是將兩者合併為typedef int am,*bm;而已

7樓:匿名使用者

typedef struct bmp_picture_typbmp_picture,*bmp_picture_ptr;

等價於:

typedef struct bmp_picture_typbmp_picture;

typedef struct bmp_picture_typ*bmp_picture_ptr;

這只是宣告瞭一個結構體複合型別。

c語言中如何定義一個結構體

8樓:藥郎小跟班

結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。

結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如連結串列和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整宣告。

擴充套件資料:

一、結構體作用:

結構體和其他型別基礎資料型別一樣,例如int型別,char型別,只不過結構體可以做成你想要的資料型別,以方便日後的使用。

在實際專案中,結構體是大量存在的,研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡單,研發人員通常使用結構體創造新的“屬性”,其目的是簡化運算。

結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。

二、結構體的大小與記憶體對齊:

結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的cpu,對這型別的cpu取4個位元組的數要比取一個位元組要高效,也更方便。

所以在結構體中每個成員的首地址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平臺上的編譯器都有自己的預設“對齊係數”(也叫對齊模數)。

程式設計師可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的“對齊係數”。

三、結構體的規則:

1、資料成員對齊規則:結構(struct)(或聯合(union))的資料成員,第一個資料成員放在offset為0的地方,以後每個資料成員的對齊按照#pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。

2、結構(或聯合)的整體對齊規則:在資料成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大資料成員長度中,比較小的那個進行。

3、結合1、2可推斷:當#pragma pack的n值等於或超過所有資料成員長度的時候,這個n值的大小將不產生任何效果。

9樓:啦啦啦咯哦

c語言結構體型別的定義模板大概為:

struct 型別名 變數;

在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data

type)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。

在成員表列中可以是幾種基本資料型別,也可以是結構體型別。

struct 型別名{} 變數;後的分號不能漏

下面給出定義結構體型別的幾種方法:

1. 先定義結構體型別,再定義結構體變數。

struct student;

struct student stu1,stu2;//此時stu1,stu2為student結構體變數

2. 定義結構體型別的同時定義結構體變數。

struct student stu1,stu2;

此時還可以繼續定義student結構體變數如:

struct student stu3;

一般不會使用第三種定義方法,因為直接定義結構體變數stu1,stu2後就不能再繼續定義該型別的變數。

10樓:杜哥是個小天才

struct namename;

拓展資料c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。

c語言可以在for裡面同時定義變數嗎

可以的,比如 include void main 但是注意 在for裡面定義的區域性變數只有在for語句塊裡是有效的可見的而已,到外面就撤銷了 不存在了。在c 裡,還可以在for中的第乙個表示式中定義變數,例如 include using namespace std void main 不過vc6不...

c語言中我定義float變數a,平且a

因為把1 2看做乙個表示式,然後把表示式的值賦給a1 2是整數除法,結果為整回數.1.0 2或者1 2.0都是符點數,結果為符點數 強制類答型轉換就可以解決不用加 0 就直接出來的是0.500000這個問題 比如a float 1 2 如果滿意請採納,謝謝 型別轉換下就可以了 float a flo...

在c語言中若有定義,在c語言中,若有定義inta1,b2,c3,d4,x5,y6,則表示式xa

inta 1,b 2,c 3,d 4,x 5,y 6 則表示式 x a b y c d a b 不成立 則為假為0,x 0.符號要求倆個都為真才輸出真,所以表示式為假等於0 在c語言中,若有定義 int y 3,x 7 1,2,3,4,5,6,7 則表示式y x 5 的值 為 求解釋。定義乙個整形陣...