真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言——結(jié)構(gòu)體(全)-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),微信小程序開(kāi)發(fā),十年建站對(duì)成都砂巖浮雕等多個(gè)行業(yè),擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)。

一、結(jié)構(gòu)體的設(shè)計(jì)

二、結(jié)構(gòu)體變量的初始化

2.1結(jié)構(gòu)體在內(nèi)存表示;

2.2結(jié)構(gòu)體初始化;

2.3結(jié)構(gòu)體指針變量

2.4結(jié)構(gòu)體嵌套結(jié)構(gòu)體

三、結(jié)構(gòu)體成員訪問(wèn)?

3.1、結(jié)構(gòu)體成員訪問(wèn)

3.2、結(jié)構(gòu)體變量和指針

?3.3、結(jié)構(gòu)體和函數(shù)?

四、結(jié)構(gòu)體與數(shù)組

五、計(jì)算結(jié)構(gòu)體大小

三個(gè)規(guī)則:

例1、?

例2、

指定對(duì)齊值

總結(jié)


一、結(jié)構(gòu)體的設(shè)計(jì)

C語(yǔ)言提供了基本的數(shù)據(jù)結(jié)構(gòu),例如 char 、short 、int 、float....等類型;這些偶稱為內(nèi)置類型。怎樣設(shè)計(jì)出來(lái)屬于自己的類型?

程序員可以使用結(jié)構(gòu)體來(lái)封裝一些屬性,設(shè)計(jì)出新的類型,在C語(yǔ)言中稱為結(jié)構(gòu)體類型。

結(jié)構(gòu)體的定義形式為

struct 結(jié)構(gòu)體名
{
   成員列表(可以是基本的數(shù)據(jù)類型,指針,數(shù)組或其他結(jié)構(gòu)類型)
};

舉個(gè)例子來(lái)說(shuō)吧;

客觀事務(wù)(實(shí)體)是復(fù)雜的,要描述它必須從多方面進(jìn)行;也就是用不同的數(shù)據(jù)類型來(lái)描述不同的方面;用學(xué)生實(shí)體來(lái)說(shuō):

學(xué)生擁有什么? 學(xué)號(hào)、姓名、性別、年齡;

struct Student
{
  char s_id[8];
  char s_name[8];
  char s_sex[4];
  int s_age;
};

注意以下幾點(diǎn);

(1)、關(guān)鍵字struct是數(shù)據(jù)類型說(shuō)明符,指出下面說(shuō)的是結(jié)構(gòu)體類型;

(2)、標(biāo)識(shí)符Student是結(jié)構(gòu)體的類型名;

(3)、最后的分號(hào)一定要寫;

二、結(jié)構(gòu)體變量的初始化

結(jié)構(gòu)體是一種數(shù)據(jù)類型,也就是說(shuō)可以用它來(lái)定義變量。

結(jié)構(gòu)體就像一個(gè)“模板”,定義出來(lái)的變量都具有相同的性質(zhì)??梢詫⒔Y(jié)構(gòu)體比作“圖紙”,結(jié)構(gòu)體變量比作“零件”,根據(jù)同一張圖紙生產(chǎn)出來(lái)的零件的特性都是一樣的;

結(jié)構(gòu)體是一種數(shù)據(jù)類型,是創(chuàng)建變量的模板,不占用內(nèi)存空間;結(jié)構(gòu)體變量才包含了實(shí)實(shí)在在的數(shù)據(jù)、需要存儲(chǔ)空間;

2.1結(jié)構(gòu)體在內(nèi)存表示;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

C語(yǔ)言中? struct 不可少

2.2結(jié)構(gòu)體初始化;

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

2.3結(jié)構(gòu)體指針變量

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

2.4結(jié)構(gòu)體嵌套結(jié)構(gòu)體

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

三、結(jié)構(gòu)體成員訪問(wèn)? 3.1、結(jié)構(gòu)體成員訪問(wèn)

結(jié)構(gòu)體變量使用? ?.? ?訪問(wèn);

結(jié)構(gòu)體變量.對(duì)象

#include#includestruct Date
{
	int year;
	int month;
	int day;
};
struct Student
{
	char s_name[20];
	struct Date birthday;
	float score;
};
int main()
{
	struct Student stu = { "liuwen",2000,10,1,99.9 };
	printf("name=%s\nbirtyday=%d.%d.%d\nscore=%f\n", stu.s_name, stu.birthday.year, stu.birthday.month, stu.birthday.day, stu.score);
	stu.score = 77;
	printf("name=%s\nbirtyday=%d.%d.%d\nscore=%f\n", stu.s_name, stu.birthday.year, stu.birthday.month, stu.birthday.day, stu.score);
	return 0;
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

注意:對(duì)結(jié)構(gòu)體變量整體賦值有三種情況

(1)定義結(jié)構(gòu)體變量(用{}初始化)

(2)用已定義的結(jié)構(gòu)體變量初始化

(3)結(jié)構(gòu)體類型相同的變量可以作為整體相互賦值;

在C語(yǔ)言中不存在結(jié)構(gòu)體類型的強(qiáng)制轉(zhuǎn)換。

3.2、結(jié)構(gòu)體變量和指針

內(nèi)置類型可以定義指針變量,結(jié)構(gòu)體類型也可以定義結(jié)構(gòu)體類型指針;

結(jié)構(gòu)體類型指針訪問(wèn)成員的獲取和賦值形式:

(1)(*p). 成員名(.的優(yōu)先級(jí)高于*,(*p)兩邊括號(hào)不能少)

(2)? ?p->成員名(->指向符)

示例:

#include#include//#define _CRT_SECURE_NO_WARNINGS
struct Inventory//商品
{
	char description[20];//貨物名
	int quantity;//庫(kù)存數(shù)據(jù)
};
int main()
{
	struct Inventory sta = { "iphone",20 };
	struct Inventory* stp = &sta;
	char name[20] = { 0 };
	int num = 0;
	(*stp).quantity = 30;
	stp->quantity = 30;
	strcpy_s(name,sizeof(stp->description),stp->description);
	printf("%s %d\n", stp->description, stp->quantity);
	printf("%s %d\n", (*stp).description, (*stp).quantity);
	return 0;
}
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_15,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_163.3、結(jié)構(gòu)體和函數(shù)?

示例:

#include#include#define _CRT_SECURE_NO_WARNINGS
struct School
{
	char s_name[20];//學(xué)校
	int s_age;
};
void Print_a(struct School sx)
{
	printf("%s %d\n", sx.s_name, sx.s_age);
}
void Print_c(struct School* sp)
{
	printf("%s %d\n", sp->s_name, sp->s_age);
}
int main()
{
	struct School sx = { "xi'an",100 };
	Print_a(sx);
	Print_c(&sx);
	return 0;
}
watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_13,color_FFFFFF,t_70,g_se,x_16

內(nèi)存什么的看上面;

兩種傳參那個(gè)更好?通過(guò)內(nèi)存可以看出來(lái);

四、結(jié)構(gòu)體與數(shù)組

結(jié)構(gòu)體數(shù)組,是指數(shù)組中的每一個(gè)元素都是一個(gè)結(jié)構(gòu)體類型。在實(shí)際應(yīng)用中,C語(yǔ)言結(jié)構(gòu)體數(shù)組常被用來(lái)表示有相同的數(shù)據(jù)結(jié)構(gòu)的群體,比如一個(gè)班的學(xué)生,一個(gè)公司的員工等;

例如:

#include#include#define _CRT_SECURE_NO_WARNINGS
struct Student
{
	char s_name[20];//姓名
	int age;//年齡
	float score;//成績(jī)
};
int main()
{
	struct Student cla[] =
	{
		{"liuwen",18,149.9},
		{"qnge",18,145},
		{"anan",19,188},
	};
	return 0;
}
五、計(jì)算結(jié)構(gòu)體大小 三個(gè)規(guī)則:

(1)、結(jié)構(gòu)體變量的首地址,必須是結(jié)構(gòu)體變量的“大基本數(shù)據(jù)類型成員所占字節(jié)數(shù)”的整數(shù)倍;

(2)結(jié)構(gòu)體變量中的每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量,都是該成員基本數(shù)據(jù)類型所占字節(jié)數(shù)的整數(shù)倍;

(3)、結(jié)構(gòu)體變量的總大小,為結(jié)構(gòu)體變量中“大基本數(shù)據(jù)類型成員所占字節(jié)”的整數(shù)倍;

示例:假設(shè)總零地址開(kāi)始(計(jì)算)

例1、
struct node
{
	char cha;
	int ia;
	char chb;
};
int main()
{
	int size = 0;
	struct node sd = { 'a',2,'b' };
	printf("%d\n", sizeof(struct node));//12
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_12,color_FFFFFF,t_70,g_se,x_16例2、
struct node
{
	char cha;
	char chb;
	int ia;
};
int main()
{
	int size = 0;
	struct node sd = { 'a','b',2 };
	printf("%d\n", sizeof(struct node));//12
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP5bCP5ZyG6IS4,size_12,color_FFFFFF,t_70,g_se,x_16

為什么要理解字節(jié)對(duì)齊問(wèn)題?

(1)內(nèi)存大小的基本單位是字節(jié)(byte),理論上來(lái)講,可以從任意地址訪問(wèn)變量,但是實(shí)際上, cup并非逐字節(jié)讀寫內(nèi)存,而是以2,4,或8的倍數(shù)的字節(jié)塊來(lái)讀寫內(nèi)存,因此就會(huì)對(duì)基本數(shù)據(jù)類型的地址作出一些限制, 即它的地址必須是2, 4或8的倍數(shù)。那么就要求各種數(shù)據(jù)類型按照一定的規(guī)則在空間. 上排列,這就是對(duì)齊。

(2)有些平臺(tái)每次讀都是從偶地址開(kāi)始,如果一個(gè)int 型(假設(shè)為32位系統(tǒng))如果存放在偶地址開(kāi)始的地方那么一個(gè)讀周期就可以讀出這32bit,而如果存放在奇地址開(kāi)始的地方,就需要2個(gè)讀周期,并對(duì)兩次讀出的結(jié)果的高低字節(jié)進(jìn)行拼湊才能得到該32bit數(shù)據(jù)。顯然在讀取效率上下降很多。

(3)由于不同平臺(tái)對(duì)齊方式可能不同,如此一來(lái),同樣的結(jié)構(gòu)在不同的平臺(tái)其大小可能不同,在無(wú)意識(shí)的情況下,互相發(fā)送的數(shù)據(jù)可能出現(xiàn)錯(cuò)亂,甚至引|發(fā)嚴(yán)重的問(wèn)題。

指定對(duì)齊值

預(yù)處理指令# pragma pack(n)可以改變默認(rèn)對(duì)齊數(shù)。n取值是1,2, 4,8, 16。

總結(jié)

1)結(jié)構(gòu)體變量的首地址,必須是MIN{"結(jié)構(gòu)體大基本數(shù)據(jù)類型成員所占字節(jié)數(shù)",指定對(duì)齊方式}大小的整數(shù)倍。
2)結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量,都是MIN{基本數(shù)據(jù)類型成員,指定對(duì)齊方式}大小的整數(shù)倍。
3)結(jié)構(gòu)體的總大小,為MIN{結(jié)構(gòu)體“大基本數(shù)據(jù)類型成員所占字節(jié)數(shù)”(將嵌套結(jié)構(gòu)體里的基本類型也算上,得出大基本數(shù)據(jù)類型成員所占字節(jié)數(shù)),指定對(duì)齊方式} 大小的整數(shù)倍。


你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


新聞名稱:C語(yǔ)言——結(jié)構(gòu)體(全)-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/eijih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部