日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中的struct和union区别

發布時間:2023/11/30 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中的struct和union区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:Difference between Structure and Union in C

二者區別

struct

這里不做詳細說明,因為參考鏈接中都寫明了。只做一些重點強調。

struct中聲明的變量,在分配空間的時候,struct結構空間大小,大于等于其內部所有變量大小的總和,一般會大于,因為需要字節對齊

我們看一個例子

#include <stdio.h>struct MyStruct {char c;int a;char x;double b; };int main() {MyStruct s;s.c = 'c';s.a = 1000;s.x = 'D';s.b = 11.5;return 0; }

我們依次看看其賦值情況,就可以知道內存分布了。

執行s.c = 'c'

執行s.a = 1000

可以看到,中間跳過了3個字節,因為int需要4字節對齊。

繼續執行s.x = 'D'

s.b = 11.5

double需要8字節對齊,因此中間跳過了7個字節。

所以對于結構體來說,其內存分布是

所以結構體大小是24字節

驗證一下,沒什么問題。

對于結構體,沒什么好說的,無非就是有相關需求,需要一個結構,有不同的數據類型。

值得說明的是,結構體可以嵌套,例如:

struct{struct{struct{...}}int x; }

訪問上來說,如果沒名字,就直接訪問,有名字就多幾個.,指的是這種命名

struct{}name;

不過嵌套結構似乎很少用吧…

union

最大的區別就是,聯合體中定義的不同數據類型,在分配空間的時候是重疊的,也就是說,它的大小應該以占用最大空間的內個為準,要等于它的大小。

#include <stdio.h>union MyUnion {int a;double b;char c; };int main() {MyUnion b;b.a = 10;b.b = 1.0;b.c = 'a';return 0; }

b的大小是8,也就是最大的double的大小。

我們依次運行看看:

b.a = 10

b.b = 1.0

b.c = 'a'

你會發現,都是在這8字節的空間內進行的!

但是注意覆蓋問題。

對于同一塊8字節的內存空間,覆蓋的時候,只覆蓋自己占的地方,例如,對于8字節空間,改變占1字節的char的時候,只覆蓋第一個字節,剩下的7字節保持不變。

最后,它也同樣可以嵌套。

至于訪問的時候的變化,只需要明確,訪問的都是對應大小的內存單元

因此,不管誰改,都是該內存,至于值

  • 如果訪問的是double,就是把這8個字節轉換為double
  • 如果訪問的是int,就把前4個字節轉換為int
  • char同理。
  • 總結

    以上是生活随笔為你收集整理的C语言中的struct和union区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。