文章目錄
- 1.結構體的聲明
- 1.1 結構體的基礎知識
- 1.2 結構的聲明
- 1.3 結構成員的類型
- 1.4結構體變量的定義和初始化
- 2.結構體成員的訪問
- 3.結構體傳參
1.結構體的聲明
1.1 結構體的基礎知識
結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量
如果說數組是一組相同類型元素的集合,那么結構體就是一組不一定相同元素的集合
1.2 結構的聲明
struct tag
{member-list;
}variable-list;
當我們描述一個學生時:
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};
1.3 結構成員的類型
結構成員可以是標量、數組、指針,甚至是其它結構體
1.4結構體變量的定義和初始化
有了結構體類型,那么接下來就要定義變量了。
//代碼1
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};int main()
{struct stu s = { "yui",17,"female" };printf("姓名:%s 年齡:%d 性別:%s\n", s.name, s.age, s.sex);return 0;
}
//打印結果:姓名:yui 年齡:17 性別:female//代碼2struct Point
{int x;int y;
}p1;//聲明類型的同時定義變量p1;struct Point p2//定義結構體變量p2//初始化:定義變量的同時賦初值
struct Point p3 = {x,y};struct stu
{char name[10];int age;
};struct stu s = {"yui",17};//初始化struct node
{int data;struct Point p;struct node* next;
}n1 = {10,{4,5},NULL};//結構體嵌套初始化struct node n2 = {20,{5,6}.NULL}//結構體嵌套初始化
2.結構體成員的訪問
- 結構體變量訪問成員
結構體變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數。
例如:
struct stu
{char name[10];int age;
};
struct stu s;
我們可以看到s
有成員name``````age
那我們如何訪問s的成員?
struct stu s;
strcpy(stu.name,"yui");//使用.訪問name成員
s.age = 20;//使用.訪問age成員
- 結構體指針訪問指向變量的成員
有時候我們得到的不是一個結構體變量,而是指向一個結構體的指針
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};void print(struct stu* ps)
{//使用結構體指針訪問指向對象的成員printf("姓名:%s 年齡:%d 性別:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print(&s);//結構體地址傳址return 0;
}//打印結果:
//姓名:yui 年齡:17 性別:female
3.結構體傳參
#include <stdio.h>
struct stu
{char name[10];//姓名int age;//年齡char sex[10];//性別
};
//結構體傳參
void print1(struct stu s)
{printf("姓名:%s 年齡:%d 性別:%s\n", s.name, s.age,s.sex);
}
//結構體地址傳參
void print2(struct stu* ps)
{printf("姓名:%s 年齡:%d 性別:%s\n", ps->name, ps->age, ps->sex);
}
int main()
{struct stu s = { "yui",17,"female" };print1(s);//傳結構體print2(&s);//傳地址return 0;
}
//打印結果:
/*
姓名:yui 年齡:17 性別:female
姓名:yui 年齡:17 性別:female
*/
如果我們要對函數傳遞結構體時,傳地址會更好。
函數傳參的時候,參數是要壓棧的。
如果傳遞的結構體太大了,參數壓棧的系統開銷比較大,所以會導致性能的下降。
如果你需要保留函數中對結構體的修改,也是需要傳遞地址的。
綜上:
結構體傳參的時候,盡量傳結構體的地址。
完