成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C語言結(jié)構(gòu)體用法很多,坑也很多

開發(fā) 前端
本文主要說的是C語言中的結(jié)構(gòu)體,結(jié)構(gòu)體是C語言中重要的一部分內(nèi)容,也是C語言中常用的一種數(shù)據(jù)結(jié)構(gòu)。

C語言可謂是編程界的傳奇語言,歷經(jīng)幾十年,依然排名前列。

本文主要說的是C語言中的結(jié)構(gòu)體,結(jié)構(gòu)體是C語言中重要的一部分內(nèi)容,也是C語言中常用的一種數(shù)據(jù)結(jié)構(gòu)。

[[320277]]

一、關(guān)于結(jié)構(gòu)體

在C語言中,結(jié)構(gòu)體(struct)指的是一種數(shù)據(jù)結(jié)構(gòu),是C語言中復(fù)合數(shù)據(jù)類型(aggregate data type)的一類。

結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。

結(jié)構(gòu)體的定義如下所示:

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

其中:

  • struct為結(jié)構(gòu)體關(guān)鍵字;
  • tag為結(jié)構(gòu)體的標(biāo)志;
  • member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;
  • variable-list為此結(jié)構(gòu)體聲明的變量。

在一般情況下:tag、member-list、variable-list這3部分至少要出現(xiàn)2個(gè)。

二、結(jié)構(gòu)體常規(guī)定義

不同的定義,應(yīng)用在不同場景,所以,我們編程時(shí)需要結(jié)合實(shí)際情況來定義結(jié)構(gòu)體。

方法1:

定義結(jié)構(gòu)體stu,此時(shí)結(jié)構(gòu)體相當(dāng)于一個(gè)類型,比如int,如需使用此結(jié)構(gòu)體,方法同int.

  1. struct stu 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }; 
  6.  
  7. struct stu stu1, stu2; 

方法2:

定義結(jié)構(gòu)體stu同時(shí)定義需要使用的結(jié)構(gòu)體變量stu1, stu2。如后面再需要定義結(jié)構(gòu)體變量,方法同1.

  1. struct stu 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }stu1, stu2; 
  6.  
  7. struct stu stu3; 

方法3:

定義結(jié)構(gòu)體時(shí),結(jié)構(gòu)體名稱缺省,同時(shí)定義結(jié)構(gòu)體變量stu1,stu2。但后面不可再定義結(jié)構(gòu)體變量。

  1. struct 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }stu1, stu2; 

提示:

這里不能像上面再定義結(jié)構(gòu)體變量:(以下錯(cuò)誤)

  1. struct stu3;  
  2. struct stu stu3; 

三、使用typedef定義結(jié)構(gòu)體

這里先簡單說下typedef。

在C和C++編程語言中,typedef是一個(gè)關(guān)鍵字。它用來對(duì)一個(gè)數(shù)據(jù)類型取一個(gè)別名,目的是為了使源代碼更易于閱讀和理解。它通常用于簡化聲明復(fù)雜的類型組成的結(jié)構(gòu) ,但它也常常在各種長度的整數(shù)數(shù)據(jù)類型中看到,例如size_t和time_t。

維基百科

方法4:

使用typedef定義結(jié)構(gòu)體同時(shí),給stu結(jié)構(gòu)體別名STU,后續(xù)定義可不用使用struct stu,直接使用STU即可。

  1. typedef struct stu 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }STU; 
  6.  
  7. STU stu1; 

你會(huì)發(fā)現(xiàn),其實(shí)就是通過關(guān)鍵字typedef,將STU取代了struct stu。

當(dāng)然,也可以這么用:

  1. struct stu stu1; 

上面這種定義就失去了typedef的意思,所以不推薦。

方法5:

使用typedef定義結(jié)構(gòu)體時(shí),省掉結(jié)構(gòu)體第一個(gè)別名stu,直接在后面加STU,使用方法同上。

  1. typedef struct 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }STU; 
  6.  
  7. STU stu1; 

方法6:

還有一種符合語法規(guī)則,但意義不大的定義方式。

  1. typedef struct stu 
  2.     char  aa; 
  3.     short bb; 
  4.     int   cc; 
  5. }; 
  6.  
  7. struct stu stu1; 

以上這些定義方式算是語法的知識(shí),如果還不懂,請(qǐng)?jiān)俅螐?fù)習(xí)一下。

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

結(jié)構(gòu)體的大小,我相信很多人都沒搞明白。實(shí)際編程中也是很多地方都在應(yīng)用,比如:存儲(chǔ)、拷貝結(jié)構(gòu)體時(shí)都會(huì)牽涉到結(jié)構(gòu)體大小的問題。

1. 對(duì)比兩結(jié)構(gòu)體大小,一樣嗎?

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

  1. struct stu 
  2.     char  aa; 
  3.     short bb; 
  4.     char  cc; 
  5. }stu1; 

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

  1. struct stu 
  2.     char  aa; 
  3.     char  bb; 
  4.     short cc; 
  5. }stu2; 

答案是不一樣。程序測試得出sizeof(stu1)=6, sizeof(stu2)=4.

2. 分析不一樣原因

結(jié)構(gòu)體計(jì)算要遵循字節(jié)對(duì)齊原則,一般滿足三個(gè)準(zhǔn)則:

  • 結(jié)構(gòu)體變量的首地址能夠被其最寬基本類型成員的大小所整除;
  • 結(jié)構(gòu)體每個(gè)成員相對(duì)于結(jié)構(gòu)體首地址的偏移量(offset)都是成員大小的整數(shù)倍,如有需要編譯器會(huì)在成員之間加上填充字節(jié);
  • 結(jié)構(gòu)體的總大小為結(jié)構(gòu)體最寬基本類型成員大小的整數(shù)倍,如有需要編譯器會(huì)在最末一個(gè)成員之后加上填充字節(jié);

對(duì)于上面結(jié)構(gòu)體stu1來說,最大字節(jié):2字節(jié),順序是 char->short->char:

對(duì)于上面結(jié)構(gòu)體stu2來說,最大字節(jié):2字節(jié),順序是 char->char->short:

通過上面兩個(gè)表格,相信你應(yīng)該明白了,改成4字節(jié)的int,原理一樣。

最后,強(qiáng)調(diào)一下,學(xué)習(xí)編程,不能只看書,要多敲代碼。

責(zé)任編輯:趙寧寧 來源: strongerHuang
相關(guān)推薦

2023-11-15 13:15:52

C語言結(jié)構(gòu)體

2025-05-19 04:00:00

2023-12-01 07:38:33

微服務(wù)訂單服務(wù)

2010-07-09 14:51:21

SQL Server

2021-06-06 22:22:32

c語言編程語言

2010-02-04 16:35:24

C++ delete

2013-05-14 09:55:16

推廣手游海外市場

2022-08-19 14:38:52

C語言結(jié)構(gòu)體struct

2020-11-16 11:24:00

Spring AOP數(shù)據(jù)庫

2019-02-21 15:50:11

谷歌云云計(jì)算AWS

2019-12-11 14:46:34

庫克蘋果科技

2021-09-21 15:56:00

iPhone 13蘋果雙十一

2015-06-29 14:23:13

JavaC++慢很多

2022-06-17 18:49:25

pythonexcel

2018-08-07 15:26:42

Linux版本系統(tǒng)

2010-03-18 17:43:16

云計(jì)算

2017-08-28 14:58:40

京東云計(jì)算OpenStack技術(shù)

2022-08-31 10:13:04

C語言代碼

2010-06-22 12:58:57

Linux at命令

2016-08-31 13:48:00

AndroidRetrofit源碼解析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品一区二区三 | 亚洲国产欧美一区二区三区久久 | 97精品超碰一区二区三区 | 国产精品久久久久久久久久久久久 | 人人澡人人射 | 91免费看片 | 午夜一区二区三区在线观看 | 日韩1区| 激情婷婷 | 午夜精| 亚洲精品4 | 国产真实精品久久二三区 | jvid精品资源在线观看 | 欧美国产精品 | 久久亚洲一区二区三区四区 | 九九热这里只有精品在线观看 | 日韩中文字幕久久 | 影音先锋亚洲资源 | 日韩一区二区在线视频 | 日韩精品一区二区三区免费视频 | 久久激情视频 | 超碰97人人人人人蜜桃 | 午夜精品久久久久久久久久久久久 | 欧美日韩高清一区 | 日本精品久久久久久久 | 精品成人一区二区 | 亚洲精品高清视频在线观看 | 亚洲欧美日韩在线 | 美女久久 | caoporn地址 | 欧美成人精品一区二区男人看 | 国产亚洲精品精品国产亚洲综合 | 黄色在线播放视频 | 成人精品一区亚洲午夜久久久 | 九九在线视频 | 99福利视频 | 久久久久久国产免费视网址 | 中文字幕在线人 | 亚洲欧美在线一区 | 国产区一区二区三区 | 亚洲精品一区二三区不卡 |