結構是一種複合的數據類型,可以包含多個不同類型的成員變數。 我們可以通過結構類型聲明結構,並通過結構變數來訪問結構的成員。結構變數可以賦初值,可以進行運算,還可以作為函數參數傳遞。 ...
定義
結構是一種複合的數據類型,可以包含多個不同類型的成員變數。
我們可以通過結構類型聲明結構,並通過結構變數來訪問結構的成員。結構變數可以賦初值,可以進行運算,還可以作為函數參數傳遞。
How to 聲明
看下麵的例子——聲明一個有關學生的結構體
它就可以聲明在變數的內部,也可以在變數的外部。
struct student {
int id;
char *name;
};
How to 定義
使用上還算簡單,就像是平常用變數一樣
#include <stdio.h>
struct student {
char *id;
char *name;
};
int main() {
struct student Mryan2005;
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}
程式裡面就會輸出這樣的東西
Mryan2005's id is 007
其實,還有第二種辦法。
#include <stdio.h>
struct {
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}
當然,程式裡面就會輸出這樣的東西
Mryan2005's id is 007
但這樣的做法也只是因為這個結構體是暫時的。
最後一種寫法是這樣的
#include <stdio.h>
struct student {
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005.id = "007";
Mryan2005.name = "Mryan2005";
printf("%s's id is %s", Mryan2005.name, Mryan2005.id);
}
當然,程式裡面就會輸出這樣的東西
Mryan2005's id is 007
結構在記憶體中的體現
還是這個結構體
struct student {
int id;
char *name;
};
我們可以先看一下sizeof(struct student)
的結果是多少
#include <stdio.h>
struct student {
char *id;
char *name;
};
int main() {
printf("size of student is %d", sizeof(struct student));
}
它的size是16
。
至於為什麼等於16,那是因為我在64位的操作系統中運行,所以,一個指針變數為8個位元組;如果在32位系統下,則指針占用4位元組。
初始化
第一種辦法
#include <stdio.h>
struct student {
int order
char *id;
char *name;
} Mryan2005;
int main() {
struct student Mryan2005 = {01, "007", "Mryan2005"};
}
這就出現了這樣的情況
第二種辦法
#include <stdio.h>
struct student {
int order;
char *id;
char *name;
} Mryan2005;
int main() {
struct student Mryan2005 = {.id = "007", .name = "Mryan2005"};
}
id
和name
被賦予了具體的值,而order
沒有,那結果就是order
為0
。
這就會是這樣子了
結構運算
整體運算
#include <stdio.h>
struct student {
int order;
char *id;
char *name;
} Mryan2005;
int main() {
Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
}
變數與變數間直接賦值
就是這樣
#include <stdio.h>
struct student {
int order;
char *id;
char *name;
};
int main() {
struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
struct student Mryan2003 = Mryan2005;
}
先說一下,(struct student){ 1, "007", "Mryan2005"}
是什麼意思?
這個意思就是,將{ 1, "007", "Mryan2005"}
強制轉換成struct student
類型
我們看一下,結果會是怎麼樣
這就是數組做不了的,結構可以做。
那改動一個值,又會是怎麼樣的結果
#include <stdio.h>
struct student {
int order;
char *id;
char *name;
};
int main() {
struct student Mryan2005 = (struct student){ 1, "007", "Mryan2005"};
struct student Mryan0415 = Mryan2005;
Mryan0415.name = "Mryan2005";
}
結果竟然是這樣
結構成員
我們可以用.訪問其成員,例如:Mryan2005.id
我們就可以訪問到Mryan2005
中的id
。
結構指針
結構的名字不是變數的地址,必須要用&
struct date *Mystudent = &Mryan2005;
本文來自博客園,作者:Mryan2005,轉載請註明原文鏈接:https://www.cnblogs.com/Mryan2005/p/17873377.html