我正在嘗試創建一個結構體,我將通過指標在函式中使用該結構體。問題是我不想使用全域變數,因此如果我嘗試在主檔案中定義結構,我不能使用指向結構的指標作為函式原型的引數,因為它尚未定義。
我該怎么做呢?我認為解決方案是在頭檔案中定義結構,然后在主檔案中創建該型別的區域變數。這是解決這個問題的正確方法嗎?如果這是正確的,將不勝感激有關我在這里實際做什么的一些資訊。
對不起,如果我在發布時做錯了什么,這是我的第一次。
我認為解決方案的示例是
主檔案
#include <stdio.h>
typedef struct Vehicle{
int a;
char b;
};
function(Vehicle *p);
主檔案
#include "Main.h"
Vehicle Car1;
Vehicle *p=&Car1;
function(p);
uj5u.com熱心網友回復:
typedef 的正確語法是
typedef T-IDENTIFIER IDENTIFIER-LIST;
其中 IDENTIFIER-LIST 中列出的逗號分隔識別符號成為T-IDENTIFIER 的別名。很多時候 IDENTIFIER-LIST 將包含單個識別符號。
例如,在
typedef int integer, number;
integer并且number現在是int.
當涉及到typedef與結構一起使用時,表單
typedef struct foo { /* ... */ } foo_type;
或多或少的簡寫
typedef struct foo foo_type;
struct foo { /* ... */ };
但確實允許您typedef使用匿名結構
typedef struct { /* ... */ } foo_type;
盡管如此,在您的代碼中,您已從typedef.
如果main.c確實完全由您發布的代碼組成,它將無法編譯。每個 C 程式都需要一個入口點,并且在托管環境中,它是main具有簽名int main(void)或int main(int argc, char **argv).
雖然您可以在函式外部宣告變數(即全域變數),但您不能從函式外部呼叫函式。一切從main.
一個作業示例程式:
main.h:
typedef struct {
int a;
char b;
} Vehicle;
void function(Vehicle *p);
main.c:
#include <stdio.h>
#include "main.h"
int main(void) {
Vehicle car = { 51, 'A' };
function(&car);
}
void function(Vehicle *v) {
printf("Vehicle: a: %d, b: %c\n", v->a, v->b);
}
uj5u.com熱心網友回復:
我不能使用結構體作為函式原型的引數
你誤會了什么。
- 你的 typedef 是相當無用的。
- 您當然可以使用指向結構的指標作為函式引數和函式原型。
typedef struct {
int a;
char b;
} Vehicle;
int foo(Vehicle *); // prototype
您不能在其他函式之外呼叫函式(如 main.c
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379851.html
標籤:C
上一篇:使用多個結構的分段錯誤
