溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言結構體應用實例分析

發(fā)布時間:2022-04-13 14:34:34 來源:億速云 閱讀:149 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“C語言結構體應用實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C語言結構體應用實例分析”文章能幫助大家解決問題。

1、結構體的聲明

1.1 結構的基礎知識

結構是一些值的集合,這些值稱為成員變量。結構的每個成員可以是不同類型的變量

1.2 結構的聲明

struct tag
{
	member-list;
}variable-list;

下面幾種方式都一樣,定義了學生的結構體類型,內容包括:名字、年齡、性別、學號

//舉例1
struct Stu
{
	char name[20];//名字
	int age;//年齡
	char sex[5];//性別
	char id[20];//學號
};//分號不能丟

//舉例2
struct Stu
{
	char name[20];//名字
	int age;//年齡
	char sex[5];//性別
	char id[20];//學號
}s1,s2,s3;//定義了3個結構體類型的變量

//舉例3
typedef struct stu stu;

//舉例4
typedef struct stu
{
	char name[20];
	int age;
	char sex[8];
	float score;
}stu;

int main()
{
	struct stu stu4;//局部變量
	struct stu stu5;
	stu stu6;//全局變量
	return 0;
}

1.3 結構成員的類型

結構的成員可以是標量、數組、指針,甚至是其他結構體

1.4 結構體變量的定義和初始化

struct Point
{
	int x;
	int y;
}p1; //聲明類型的同時定義變量p1

struct Point p2; //定義結構體變量p2

//初始化:定義變量的同時賦初值。
struct Point p3 = { x, y };

struct Stu //類型聲明
{
	char name[15];//名字
	int age; //年齡
};
struct Stu s = { "zhangsan", 20 };//初始化

struct Node
{
	int data;
	struct Point p;
	struct Node* next;
}n1 = { 10, {4,5}, NULL }; //結構體嵌套初始化

struct Node n2 = { 20, {5, 6}, NULL };//結構體嵌套初始化

2、結構體成員的訪問

2.1 點操作符訪問

結構變量的成員是通過點操作符(.)訪問的。點操作符接受兩個操作數:變量名.成員

struct S s;
strcpy(s.name, "zhangsan");//使用.訪問name成員
s.age = 20;//使用.訪問age成員

2.2 ->操作符訪問

指向一個結構體的指針,結構體指針訪問指向變量的成員,變量名 ->成員

struct Stu
{
	char name[20];
	int age;
};
void print(struct Stu* ps)
{
	printf("name = %s age = %d\n", (*ps).name, (*ps).age);
//使用結構體指針訪問指向對象的成員
	printf("name = %s age = %d\n", ps->name, ps->age);
}

3、結構體傳參

3.1 參數是結構體類型的變量

struct point
{
	int x;
	int y;
}p1 = {10,20};

struct s//結構體
{
	char c;
	struct point sp;
	double d;
	char arr[20];//字符串
};

void print1(struct s ss)//傳參結構體
{
	printf("%c\n", ss.c);
	printf("%d\n", ss.sp.x);
	printf("%d\n", ss.sp.y);
	printf("%lf\n", ss.d);
	printf("%s\n", ss.arr);
}
int main()
{
	struct point p1 = { 100, 200 };//定義1個變量,并初始化
	struct s ss = { 'w',{100,20},5.5,"hello" };//初始化
	ss.c = 'b';
	ss.sp.x = 1000;
	ss.sp.y = 2000;
	ss.d = 3.14;
	//ss.arr = "wolrd";錯誤的方法
	strcpy(ss.arr, "world");//字符串賦值函數
	print1(ss);//打印結構體變量
}

3.2 參數是結構體類型的變量的地址

struct point
{
	int x;
	int y;
}p1 = {10,20};

struct s
{
	char c;
	struct point sp;
	double d;
	char arr[20];//字符串
};
void print2(struct s* ss)//傳參地址
{
	printf("%c\n", ss->c);
	printf("%d\n", ss->sp.x);
	printf("%d\n", ss->sp.y);
	printf("%lf\n", ss->d);
	printf("%s\n", ss->arr);
}
int main()
{
	struct s ss = { 'w',{100,20},5.5,"hello" };//初始化
	ss.c = 'b';
	ss.sp.x = 1000;
	ss.sp.y = 2000;
	ss.d = 3.14;
	//ss.arr = "wolrd";錯誤的方法
	strcpy(ss.arr, "world");
	print2(&ss);//打印結構體變量
}

3.3 結構體傳參對比

上面兩種函數實現的效果一樣,見下圖:

C語言結構體應用實例分析

函數print1接受的是結構體類型變量,是形參,另外開辟了空間,將實參拷貝了一份,占用內存空間大

C語言結構體應用實例分析

- 函數print2接受的是結構體類型的地址,定義結構體類型的指針接收地址,只開辟了空間存放地址,占用內存空間小

C語言結構體應用實例分析

**要注意:**函數傳參的時候,參數是需要壓棧的。如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統(tǒng)開銷比較大,所以會導致性能的下降。因此,結構體傳參的時候,要傳結構體的地址,即函數 print2 比函數 print1 效果好。

關于“C語言結構體應用實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI