1樓:手機使用者
要定義一個struct變數,首先要定義一個結構體變數型別名 即struct 結構體名
例如定義一個按鍵屬性結構體(包含 是否有按鍵值更新(renew)和按鍵值(num)兩個成員)
struct key_attribute;到此只是定義了一個型別名為 struct key_attribute的結構體變數型別,僅僅是定義了一個型別而已,不生成**,它的的屬性和 int ,char,一樣,只是一個型別說明。
有了型別之後就可以像 int i;定義i為一個整型變數一樣,利用剛剛宣告過的結構體變數型別struct key_attribute定義一個型別屬性如struct key_attribute(包含 兩個unsigned char 無符號字元型變數 成員)的結構體變數了。
如 struct key_attribute key; //就定義了key 為一型別為struct attribute 的結構體變數 此時key 就會產生**,佔用記憶體了。
具體應用如下
在key.h標頭檔案中宣告key為一外部結構體變數
#ifndef _key_h_
#define _key_h_
。。。。
struct key_attribute//定義一個名為 struct key_attribute 的結構體型別。型別屬性為包含兩個無符號字元型變數成員;//到此就定義好 struct key_attribute 型別了,只要c檔案中包含 "key.h"就可以直接像用 int 定義變數一樣,定義struct key_attribute 型別的結構體變數了
//如果 file1.c中包含 "key.h" 並定義了 struct key_attributekey;則只要在"key.
h"檔案中用一條外部變數宣告 extern struct key_attribute key,其它檔案只要包含"key.h"就可以對結構體變數key進行操作了。
extern struct key_attribute key; //宣告變數key 為一屬性為struct key_attribute的外部結構體變數,任何包含"key.h"都可以不用再次宣告key為外部變數而直接使用結構體變數key了。
//這樣做的好處是,如果在標頭檔案裡面定義變數則編譯器會為呼叫標頭檔案裡的同一變數的不同檔案分配不同的儲存空間,造成儲存空間浪費。
2樓:風若遠去何人留
前提: 該變數必須為全域性變數,不能是靜態全域性變數或區域性變數。
方法:1 在標頭檔案中引用定義對應結構體的標頭檔案,或者直接在該標頭檔案中定義結構體。
2 宣告變數。宣告格式為
extern struct type var_name;
其中,type為結構體型別名,var_name為結構體變數名。
1 需要注意的是,extern可以省略,但帶上extern會使程式可讀性更好。
2 不能有初始化值,一旦帶有初始值,就會被系統按照定義處理,導致編譯出錯。
按照以上方式宣告後,凡是引用該標頭檔案的,都可以直接使用該結構體變數。
c語言關於外部檔案呼叫結構體變數的問題,急求
3樓:匿名使用者
最終的答案我已經找到:
//file: head.h
struct test
; // 這裡不能定義任何變數,因為標頭檔案被許多檔案包含,會出現重複定義
extern struct test *right; // 申明結構體變數 right 在其它檔案中定義
//file: use.c
struct test *right; // 在這裡將 right 定義為全域性變數
//file: other.c
#include "head.h" // 只要將標頭檔案包含進去,任何檔案都可以呼叫 right;
void over()
{ printf("%c",right->j); // 直接呼叫結構體變數 right 的成員}
4樓:匿名使用者
在-1 -2檔案用extern stud 就行了
c語言中如何引用另一個原始檔中定義的結構陣列
5樓:匿名使用者
如果變數在copy另一個原始檔(.c)中定義,那麼需要在此原始檔中使用extern進行一次宣告。
比如陣列定義為: struct student[max];
那麼在此檔案中的宣告為: extern struct student[max];
c語言標頭檔案中定義結構體的問題
6樓:匿名使用者
c語言程式設計中,為防止標頭檔案在同一編譯單元被重複引用,常引入#ifndef巨集來進行保護,如:標頭檔案my_head.h
#ifndef _my_head_h_ //如果沒有定義巨集_my_head_h_
#define _my_head_h_ //則,定義該巨集名
//以下是被保護的**區
//進行相應的全域性變數和結構體型別定義
typedef struct stu stu ;
#endif //巨集判斷結束
這樣,當整個**中,多次引用這個my_head.h時,只有一次是生效的,系統編譯時,如果檢查巨集_my_head_h_ 已經定義,就不會再進入被保護的**區了。
ps: 巨集名,一般是與標頭檔案名相同,只是把字母全大寫,前後加上下劃線(_)
7樓:小西
標頭檔案由三部分內容組成:
(1)標頭檔案開頭處的版權和版本宣告。
(2)預處理塊。
(3)函式和類結構宣告等。
它的作用:
(1)通過標頭檔案來呼叫庫功能。
(2)標頭檔案能加強型別安全檢查。
用 #include 格式來引用標準庫的標頭檔案(編譯器將從標準庫目錄開始搜尋),到include子目錄下搜尋給出的檔案,並把它嵌入到當前檔案中 。
用 #include 「filename.h」 格式來引用非標準庫的標頭檔案(編譯器將從使用者的工作目錄開始搜尋),在當前目錄中進行搜尋,如果找不到,再按標準方式進行搜尋 ,這種方式適用於使用者自己建立的標頭檔案。
需要對外公開的常量放在標頭檔案中,不需要對外公開的常量放在定義檔案的頭部。為便於管理,可以把不同模組的常量集中存放在一個公共的標頭檔案中
在C語言中,標頭檔案的作用是什麼,c語言標頭檔案的是幹什麼用的?
1 加強型別檢查,提高 得型別安全性。在c 中使用標頭檔案,對自定義型別的安全也是非常重要的。雖然,在語法上,同一個資料型別 如一個class 在不同的原始檔中書寫多次是允許的,程式設計師認為他們是同一個自定義型別。2 減少 的重複書寫,提高編寫和修改程式的效率。在程式開發的過程中,對某些資料型別或...
C語言中函式宣告的位置有幾種,在C語言中,函式定義跟函式宣告有什麼區別有什麼不同之出?
1.把子函式放主函式main函式外並且是之前定義,無需宣告。2.如果你把子函式放到main函式外,則必須在定義的時候先宣告。3.如果把 子函式放在main函式中就不需要提前宣告瞭。首先,你提的問題就有問題。c是一門程式語言,函式是在源 裡面宣告的。所以你該問在c語言編寫的源 裡,函式宣告的位置有幾種...
在c語言中用do while或while求1到10的階乘之和
include int main void printf 10的階乘是 ld n result return 0 include int main void printf d n sum return 0 int fun int n 求n的階乘 1.do while 語句版權 int sum 0 i...