C語言中定義結構體如何在不同的 C檔案中使用

時間 2021-08-30 09:16:56

1樓:家谷秋魯曠

struct

node

這樣就定義了一個結構體型別node,它有兩個int型別的成員,分別是a和b,定義變數是用

struct

node

st_a;

這樣的形式.(例如,上式就定義了一個名為st_a的結構體變數)

2樓:橙心橙願

比如三個.c檔案一個.h檔案

c      2.c     3.c      4.h這三個標頭檔案都引用4.h include<4.h>4.h中定義一個結構體型別struct test{};

1.c中定義一個該結構體型別的全域性變數struct test mode;

4.h中extern struct test mode;

其他.c檔案就可以直接使用這個結構體變數了,並且是共用的

3樓:匿名使用者

#include

然後就用啊

正式一點的,可以宣告

extren struct ***;

就可以了

注意標頭檔案需要用#ifndef #define #endif或者#pragama once,確保標頭檔案只引入一次,以免引起重複定義的錯誤。

4樓:水上漂湯

使用巨集可以避免重複定義,參考:http://zhidao.

5樓:匿名使用者

包含這個.h標頭檔案即可。

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

6樓:藥郎小跟班

結構體的定義如下所示,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值的大小將不產生任何效果。

7樓:啦啦啦咯哦

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後就不能再繼續定義該型別的變數。

8樓:杜哥是個小天才

struct namename;

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

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

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

9樓:匿名使用者

struct node

這樣就定義了一個結構體型別node,它有兩個int型別的成員,分別是a和b,定義變數是用

struct node st_a;

這樣的形式.(例如,上式就定義了一個名為st_a的結構體變數)

10樓:**夢幻

struct name

11樓:匿名使用者

struct 結構名 ;

如struct a ;

12樓:匿名使用者

struct student //結構體型別的說明與定義分開。 宣告 {...

2.2 . 不環保的方式 #include struct student /*宣告時直接定義*/ { int...3.

c語言中如何在多個檔案中引用同一個結構體

13樓:滄海雄風

把結構體定義在一個公共標頭檔案裡 然後都包含這個標頭檔案

14樓:匿名使用者

引用結構

來體有引用型別,和引用全域性自變數bai兩種方式。

1 引用型別。

需要du將結構體定義

zhi與標頭檔案中(.h檔案),然後在dao需要引用型別的原始檔(.c)中,均引用該標頭檔案,即可使用該型別。

2 引用全域性變數。

要引用全域性變數,需要先引用型別,之後在一個原始檔中定義全域性變數,在其它原始檔中宣告該全域性變數,即可使用。

比如結構體為struct test, 定義全域性變數為struct test glabol_test;

在其它檔案中,只需要

extern struct test globol_test;

即可在對應檔案宣告所在行之下進行呼叫。

ps:該宣告部分,也可以寫在定義結構體的標頭檔案中。

15樓:匿名使用者

在包含結構體的檔案開始加一行

#pragma once

這樣只編譯一次

16樓:匿名使用者

//file2.c

#include "file1.h"

#include "file3.c"

st gg;

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

c語言結構體定義 struct為結構體關鍵字,tag為結構體的標誌,member list為結構體成員列表,其必須列出其所有成員 variable list為此結構體宣告的變數。結構體是c語言中聚合資料型別 aggregatedatatype 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較...

c語言結構體別名定義問題,C語言結構體別名定義問題

typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。 c語言...

1 C語言的結構特點,C語言結構體定義

c語言程式結構的特點是順序結構 選擇結構 迴圈結構。1 順序結構,預設的流程結構,按照書寫順序執行每一條語句。2 選擇結構,對給定的條件進行判斷,再根據判斷結果來決定執行那一段 3 迴圈結構,在給定條件成立的情況下,反覆執行某一段 只有滿足條件是才會執行迴圈體,特別注意是否進入了死迴圈。結構特點 1...