最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言結(jié)構(gòu)體詳細(xì)圖解分析

 更新時(shí)間:2022年03月25日 10:27:21   作者:瑯時(shí)壹  
C 數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類(lèi)型,它允許你存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng),本篇讓我們來(lái)了解C 的結(jié)構(gòu)體

結(jié)構(gòu)體

結(jié)構(gòu)是一些值的集合,這些值稱(chēng)為成員變量。結(jié)構(gòu)的每個(gè)成員是不同類(lèi)型的變量。

為什么要有結(jié)構(gòu)體

比如說(shuō),描述一個(gè)學(xué)生時(shí),需要有

  • 名字
  • 性別
  • 年齡
  • 身高

來(lái)一起描述,需要不同的變量,便有了結(jié)構(gòu)體類(lèi)型來(lái)描述

結(jié)構(gòu)體的聲明

struct tag
{
	member-lest//成員列表
}variable-list;//變量列表

例如一個(gè)學(xué)生

struct stu
{
	char name[20];
	char sex[5];
	int age;
	int hight;
};//這里有沒(méi)有變量列表都可以

struct stu
{
	char name[20];
	char sex[5];
	int age;
	int hight;
}s2,s3,s4;//s2,s3,s4全局變量
struct stu s5;
int main()
{
	struct stu s1;//結(jié)構(gòu)體變量
}

特殊聲明

在聲明結(jié)構(gòu)體時(shí)候,可以不完全聲明

struct
{
	char c;
	int a;
	double a;
}sa;//匿名結(jié)構(gòu)體變量,必須在此處定義變量,否則以后不能使用
int main()
{
	return 0;
}

錯(cuò)誤示范

編譯器認(rèn)為ps和&sa是兩種類(lèi)型,這種寫(xiě)法是錯(cuò)誤的

數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)在內(nèi)存中存儲(chǔ)的結(jié)構(gòu)

關(guān)于列表

struct node
{
	int date;
	struct node next;
};
int main()
{
	return 0;
}

這樣無(wú)法判斷結(jié)構(gòu)體大小 只需在結(jié)構(gòu)體存放能找到下一個(gè)結(jié)構(gòu)體內(nèi)容的指針即可

struct node
{
	int date;
	struct node* next;
};
int main()
{
	return 0;
}

也可以這樣(重命名使用舉例)

typedef struct node
{
	int date;
	struct node* next;
}node;

int main()
{
	struct node n2 = { 0 };//2者都可以使用
	node n = { 0 };//盡量不對(duì)結(jié)構(gòu)體使用typedef
}

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

struct point
{
	int x;
	int y;
}p1;             //聲明類(lèi)型同時(shí)定義變量p1
struct point p2;//定義結(jié)構(gòu)體變量p2


//初始化:定義變量的同時(shí)賦初值
struct point p3 = { 1,2 };

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

struct node
{
	int date;
	struct point p;
	struct node* next;
}n1 = { 10,{4,5},NULL };          //結(jié)構(gòu)體嵌套初始化

struct node n2 = { 20,{5,6},NULL };//結(jié)構(gòu)體嵌套初始化

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

先來(lái)觀察下列代碼

#include <stdio.h>
int main()
{
	struct S1

{
	char c1;
	int i;
	char c2;
};
printf("%d\n", sizeof(struct S1));
//練習(xí)2
struct S2
{
	char c1;
	char c2;
	int i;
};
printf("%d\n", sizeof(struct S2));
//練習(xí)3
struct S3
{
	double d;
	char c;
	int i;
};
printf("%d\n", sizeof(struct S3));
//練習(xí)4-結(jié)構(gòu)體嵌套問(wèn)題
struct S4
{
	char c1;
	struct S3 s3;
	double d;
};
printf("%d\n", sizeof(struct S4));
return 0;
}

運(yùn)行結(jié)果

發(fā)現(xiàn)并不是數(shù)據(jù)類(lèi)型大小的簡(jiǎn)單相加

存在對(duì)齊

如何計(jì)算?
首先得掌握結(jié)構(gòu)體的對(duì)齊規(guī)則:
1. 第一個(gè)成員在與結(jié)構(gòu)體變量偏移量為0的地址處。
2. 其他成員變量要對(duì)齊到某個(gè)數(shù)字(對(duì)齊數(shù))的整數(shù)倍的地址處。
對(duì)齊數(shù) = 編譯器默認(rèn)的一個(gè)對(duì)齊數(shù) 與 該成員大小的較小值。
VS中默認(rèn)的值為8
3. 結(jié)構(gòu)體總大小為最大對(duì)齊數(shù)(每個(gè)成員變量都有一個(gè)對(duì)齊數(shù))的整數(shù)倍。
4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對(duì)齊到自己的最大對(duì)齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整
體大小就是所有最大對(duì)齊數(shù)(含嵌套結(jié)構(gòu)體的對(duì)齊數(shù))的整數(shù)倍。
為什么存在內(nèi)存對(duì)齊 ?
大部分的參考資料都是如是說(shuō)的:
1. 平臺(tái)原因(移植原因):
不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特
定類(lèi)型的數(shù)據(jù),否則拋出硬件異常。

到此這篇關(guān)于C語(yǔ)言結(jié)構(gòu)體詳細(xì)圖解分析的文章就介紹到這了,更多相關(guān)C語(yǔ)言 結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中std::count函數(shù)介紹和使用場(chǎng)景

    C++中std::count函數(shù)介紹和使用場(chǎng)景

    std::count函數(shù)是一個(gè)非常實(shí)用的算法,它可以幫助我們快速統(tǒng)計(jì)給定值在指定范圍內(nèi)的出現(xiàn)次數(shù),本文主要介紹了C++中std::count函數(shù)介紹和使用場(chǎng)景,感興趣的可以了解一下
    2024-02-02
  • CrashRpt使用案例詳解

    CrashRpt使用案例詳解

    這篇文章主要介紹了CrashRpt使用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解C語(yǔ)言初階基礎(chǔ)

    詳解C語(yǔ)言初階基礎(chǔ)

    這篇文章主要介紹了C語(yǔ)言中的初階基礎(chǔ),介紹了其相關(guān)概念,具有一定參考價(jià)值。需要的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 華為面試題數(shù)字大小寫(xiě)轉(zhuǎn)換

    華為面試題數(shù)字大小寫(xiě)轉(zhuǎn)換

    一個(gè)四位數(shù),如1024,1004,打印出他們的中文形式,如果一千零二十四,一千零四,大家參考使用吧
    2013-12-12
  • C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解

    C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解

    下面小編就為大家?guī)?lái)一篇C基礎(chǔ) 尋找隨機(jī)函數(shù)的G點(diǎn)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 使用MinGW使Windows通過(guò)gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法

    使用MinGW使Windows通過(guò)gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法

    這篇文章主要介紹了使用MinGW使Windows通過(guò)gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 詳解Dijkstra算法原理及其C++實(shí)現(xiàn)

    詳解Dijkstra算法原理及其C++實(shí)現(xiàn)

    Dijkstra算法用于計(jì)算一個(gè)節(jié)點(diǎn)到其他節(jié)點(diǎn)的最短路徑。Dijkstra是一種按路徑長(zhǎng)度遞增的順序逐步產(chǎn)生最短路徑的方法,是一種貪婪算法。本文將詳解Dijkstra算法原理及其C++實(shí)現(xiàn),感興趣的可以了解一下
    2022-07-07
  • C++可擴(kuò)展性與多線程超詳細(xì)精講

    C++可擴(kuò)展性與多線程超詳細(xì)精講

    這篇文章主要介紹了C++可擴(kuò)展性與多線程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • C語(yǔ)言修煉之路一朝函數(shù)思習(xí)得?模塊思維世間生上篇

    C語(yǔ)言修煉之路一朝函數(shù)思習(xí)得?模塊思維世間生上篇

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)
    2022-03-03
  • C語(yǔ)言實(shí)現(xiàn)快速排序

    C語(yǔ)言實(shí)現(xiàn)快速排序

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)快速排序算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

沾益县| 汝南县| 中牟县| 三门县| 左贡县| 介休市| 桐城市| 肇庆市| 青铜峡市| 田东县| 蓝田县| 大余县| 安福县| 南漳县| 当阳市| 德江县| 沙田区| 卢氏县| 孝感市| 炎陵县| 湘乡市| 龙游县| 林口县| 旌德县| 托克托县| 泽州县| 丽江市| 黔江区| 深圳市| 泰安市| 霍林郭勒市| 文山县| 余江县| 绥芬河市| 文安县| 黑水县| 弥渡县| 靖西县| 西乌珠穆沁旗| 津市市| 西吉县|