C語言 結構體與結構體指標用法總結
阿新 • • 發佈:2019-01-05
在C語言開發中,結構體用到的機會很多。所謂結構體,就是定義一種裡面包含多種元素的變數。
我們來看一個簡單的例子。比如你想定義一個書名列表然後為每本書建立書名和作者作為書的資訊。結構體變數定義如下:
struct book {
char name[30];
char author[20];
};
struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };
以上程式碼定義了一個名為book的結構體,然後a作為帶有這個結構體的變數的一個內含兩本書的列表(結構體陣列)。也可以定義為如下:
struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } };
所完成的功能是完全一樣的。第二種方法用得更多因為寫法更簡練。
遍歷結構體中成員內容並打印出來,完整程式碼如下:
#include<stdio.h> int main() { struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } }; int i; for (i = 0; i < 2; i++) { printf("book name: %s author: %s\n", a[i].name, a[i].author); }; getchar(); return(0); }
執行後的輸出值為:
book name: Nature author: Lina
book name: Animals author: Nick
定義一個指向結構體(book)變數的指標函式p:struct book *p
現在就可以用結構體指標完成上述同樣的功能了(結構體定義在main函式外為全域性變數,main函式內為區域性變數,兩種均可):
#include<stdio.h>
struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } }; int main() { struct book*p; for (p = a; p < a+2; p++) { printf("book name: %s author: %s\n", p->name, p->author); }; getchar(); return(0); }
輸出值和之前的程式一樣。
以下例子為使用&地址符號給結構體指標賦值:
#include<stdio.h>
struct book {
char name[30];
char author[20];
};
int main() {
struct book*p;
struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };
p = &a[0];
printf("book name: %s author: %s\n", p->name, p->author);
getchar();
return(0);
}
輸出結果為存入的a[0]的資訊:
book name: Nature author: Lina
另外在許多大型軟體的開發中,經常會定義結構體變數為巨集變數以簡化結構體的引用。例如:typedef struct book{...}BOOK, 引用的時候就直接定義BOOK a。簡而言之,就是把struct book替換為BOOK。
#include<stdio.h>
typedef struct book {
char name[30];
char author[20];
}BOOK;
int main() {
BOOK*p;
BOOK a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };
p = &a[0];
printf("book name: %s author: %s\n", p->name, p->author);
getchar();
return(0);
}
執行效果是一樣的。