哈爾濱網(wǎng)站建設(shè)與管理今日國(guó)際新聞?lì)^條15條
目錄
結(jié)構(gòu)體的聲明
結(jié)構(gòu)的基礎(chǔ)知識(shí)
結(jié)構(gòu)的聲明
為什么要出現(xiàn)結(jié)構(gòu)體?
結(jié)構(gòu)成員的類型
結(jié)構(gòu)體變量的定義和初始化
定義:(全局變量//局部變量)
?初始化:
結(jié)構(gòu)體成員的訪問
結(jié)構(gòu)體傳參
結(jié)構(gòu)體的聲明
結(jié)構(gòu)的基礎(chǔ)知識(shí)
結(jié)構(gòu)(結(jié)構(gòu)體)
結(jié)構(gòu)是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不同類型的變量。
數(shù)組:一組 相同類型 元素的集合
結(jié)構(gòu)的聲明
struct tag {member-list;
}variable-list;
member-list ——成員變量的列表
variable-list ——變量列表?
為什么要出現(xiàn)結(jié)構(gòu)體?
首先,結(jié)構(gòu)體允許我們將不同類型的數(shù)據(jù)組合在一起,形成一個(gè)自定義的數(shù)據(jù)類型。這對(duì)于表示和操作復(fù)雜的數(shù)據(jù)結(jié)構(gòu)非常有用,例如在圖形學(xué)、數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)編程中。
其次,結(jié)構(gòu)體提供了一種將相關(guān)的數(shù)據(jù)和功能組織在一起的方式,以便更好地管理和訪問這些數(shù)據(jù)。通過將相關(guān)的數(shù)據(jù)放在一起,我們可以更容易地維護(hù)和操作它們,同時(shí)也可以提高代碼的可讀性和可維護(hù)性。
此外,結(jié)構(gòu)體還可以用于創(chuàng)建自定義的數(shù)據(jù)類型,以便更好地表示現(xiàn)實(shí)世界中的對(duì)象或概念。例如,我們可以使用結(jié)構(gòu)體來表示一個(gè)學(xué)生 (復(fù)雜對(duì)象)人:名字+性別+年齡+電話+地址+
描述一個(gè)學(xué)生:
typedef struct Stu
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號(hào)
}Stu;//分號(hào)不能丟
"typedef" 是 C++ 編程語(yǔ)言中的一個(gè)關(guān)鍵字,它可以用來為已經(jīng)存在的數(shù)據(jù)類型定義一個(gè)新的名稱。這樣做可以使程序更加易讀易懂,也可以簡(jiǎn)化程序中的代碼。示例代碼如下:
typedef int myInt; // 將 int 定義為 myInt myInt a = 10; // 等價(jià)于 int a = 10;
這樣,我們就可以使用 myInt 來代替 int,從而使代碼更簡(jiǎn)潔易讀。
?Stu 是重命名產(chǎn)生的新的類型
結(jié)構(gòu)成員的類型
在 C++ 編程語(yǔ)言中,結(jié)構(gòu)體(struct)是一種用戶自定義的數(shù)據(jù)類型,可以包含多個(gè)不同類型的成員變量。下面是一些常見的結(jié)構(gòu)體成員類型示例:
整數(shù)類型:
struct Person {int age;// ...
};
浮點(diǎn)數(shù)類型:
struct Circle {float radius;// ...
};
字符類型:
struct Student {char name[20];// ...
};
字符串類型(使用字符數(shù)組):
struct Book {char title[50];// ...
};
枚舉類型:
enum Gender { Male, Female };struct Employee {Gender gender;// ...
};
自定義結(jié)構(gòu)體類型:
struct Point {int x;int y;
};struct Rectangle {Point topLeft;
};
結(jié)構(gòu)體變量的定義和初始化
定義:(全局變量//局部變量)
?初始化:
定義變量的同時(shí)賦初值
//按照順序初始化:
//指定成員來初始化:
結(jié)構(gòu)體成員的訪問
結(jié)構(gòu)變量的成員是通過點(diǎn)操作符(.)訪問的。
點(diǎn)操作符接受兩個(gè)操作數(shù)。
例如:
錯(cuò)誤寫法:
實(shí)參傳遞給形參的時(shí)候,形參是實(shí)參的一份臨時(shí)拷貝,對(duì)形參的修改不會(huì)影響實(shí)參?
正確寫法:
?注:結(jié)構(gòu)體的指針可以直接用->指向成員名
結(jié)構(gòu)體傳參
struct S {int data[1000];int num;
};
struct S s = {{1,2,3,4}, 1000};
//結(jié)構(gòu)體傳參
void print1(struct S s)
{printf("%d\n", s.num);
}
//結(jié)構(gòu)體地址傳參
void print2(struct S* ps)
{printf("%d\n", ps->num);
}
int main()
{
print1(s); //傳結(jié)構(gòu)體
print2(&s); //傳地址
return 0;
}
上面的?print1?和?print2?函數(shù)哪個(gè)好些?
答案是:首選print2函數(shù)。
原因:
函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。
如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會(huì)導(dǎo)致性能的下降。
結(jié)論:
結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址。