哈爾濱網(wǎng)站建設(shè)與管理今日國際新聞頭條15條
目錄
結(jié)構(gòu)體的聲明
結(jié)構(gòu)的基礎(chǔ)知識
結(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ǔ)知識
結(jié)構(gòu)(結(jié)構(gòu)體)
結(jié)構(gòu)是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個成員可以是不同類型的變量。
數(shù)組:一組 相同類型 元素的集合
結(jié)構(gòu)的聲明
struct tag {member-list;
}variable-list;
member-list ——成員變量的列表
variable-list ——變量列表?
為什么要出現(xiàn)結(jié)構(gòu)體?
首先,結(jié)構(gòu)體允許我們將不同類型的數(shù)據(jù)組合在一起,形成一個自定義的數(shù)據(jù)類型。這對于表示和操作復(fù)雜的數(shù)據(jù)結(jié)構(gòu)非常有用,例如在圖形學(xué)、數(shù)據(jù)庫和網(wǎng)絡(luò)編程中。
其次,結(jié)構(gòu)體提供了一種將相關(guān)的數(shù)據(jù)和功能組織在一起的方式,以便更好地管理和訪問這些數(shù)據(jù)。通過將相關(guān)的數(shù)據(jù)放在一起,我們可以更容易地維護(hù)和操作它們,同時也可以提高代碼的可讀性和可維護(hù)性。
此外,結(jié)構(gòu)體還可以用于創(chuàng)建自定義的數(shù)據(jù)類型,以便更好地表示現(xiàn)實世界中的對象或概念。例如,我們可以使用結(jié)構(gòu)體來表示一個學(xué)生 (復(fù)雜對象)人:名字+性別+年齡+電話+地址+
描述一個學(xué)生:
typedef struct Stu
{
char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學(xué)號
}Stu;//分號不能丟
"typedef" 是 C++ 編程語言中的一個關(guān)鍵字,它可以用來為已經(jīng)存在的數(shù)據(jù)類型定義一個新的名稱。這樣做可以使程序更加易讀易懂,也可以簡化程序中的代碼。示例代碼如下:
typedef int myInt; // 將 int 定義為 myInt myInt a = 10; // 等價于 int a = 10;
這樣,我們就可以使用 myInt 來代替 int,從而使代碼更簡潔易讀。
?Stu 是重命名產(chǎn)生的新的類型
結(jié)構(gòu)成員的類型
在 C++ 編程語言中,結(jié)構(gòu)體(struct)是一種用戶自定義的數(shù)據(jù)類型,可以包含多個不同類型的成員變量。下面是一些常見的結(jié)構(gòu)體成員類型示例:
整數(shù)類型:
struct Person {int age;// ...
};
浮點數(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)體變量的定義和初始化
定義:(全局變量//局部變量)
?初始化:
定義變量的同時賦初值
//按照順序初始化:
//指定成員來初始化:
結(jié)構(gòu)體成員的訪問
結(jié)構(gòu)變量的成員是通過點操作符(.)訪問的。
點操作符接受兩個操作數(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ù)哪個好些?
答案是:首選print2函數(shù)。
原因:
函數(shù)傳參的時候,參數(shù)是需要壓棧的。
如果傳遞一個結(jié)構(gòu)體對象的時候,結(jié)構(gòu)體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會導(dǎo)致性能的下降。
結(jié)論:
結(jié)構(gòu)體傳參的時候,要傳結(jié)構(gòu)體的地址。