sizeof簡單分析

2021-06-18 10:45:18 字數 1273 閱讀 6216

#include #include typedef struct t1 

a;typedef struct t2

b;a aa;

b bb;

int main(void)

; int *b = (int *)malloc(20 * sizeof(int));

char *str1 ="ab\0cde\0fg";

char str2 ="ab\0cde\0fg";

char str3[20] ="abcdefg";

printf("%d\n", sizeof(a));//a是乙個整型陣列,分配20個變數的空間,每個int變數所佔4個位元組,20*4=80。

printf("%d\n", sizeof(b));//b是乙個指標,指標的大小是乙個定值,4個位元組。

printf("%d\n", sizeof(a[3]));//a[3]是乙個int變數佔4個位元組。

printf("%d\n", sizeof(b+3));//b+3也是乙個指標,故佔4個位元組。

printf("%d\n", sizeof(*(b+4)));//*(b+4)是乙個int型的值,佔4個位元組。

printf("%d\n", sizeof(str1));//str1是乙個指標,佔4個位元組。

printf("%d\n", sizeof(str2));//str2字元陣列,字串"ab\0cde\0fg"占有9個位元組,加上"\0"(因為是初始化陣列),一共10個位元組。

printf("%d\n", sizeof(str3));//str3是字元陣列,預分配20個位元組,那麼就是佔20個位元組。

printf("%d\n", sizeof(aa));//1、aa結構體三個變數的位元組數加起來是sum_aa=6個位元組;2、int要4位元組對齊,int前面要補齊到4個位元組(char|--|--|--|int),sum_aa+3=9個位元組;3、整個結構體要4位元組對齊(因為沒有定義指定對齊值,故預設以資料成員占有位元組數最大的int對齊),sum_aa+3=12個位元組。

printf("%d\n", sizeof(bb));//1、bb結構體三個變數的位元組數加起來是sum_bb=6個位元組;2、char要1位元組對齊,char前面不用補(int|--|--|--|char|char),sum_bb+0=6個位元組;3、整個結構體要4位元組對齊,sum_bb+2=8個位元組。

Sizeof與Strlen差異分析

一 sizeof sizeof 是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列 指標 型別 物件 函式等。它的功能是 獲得保證能容納實現所建立的最大物件的位元組大小。由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際...

sizeof 結構體 的分析

一 為什麼結構體計算這麼亂?答案是位元組對齊,計算機儲存系統中以byte為單位儲存資料,不同資料型別所佔的空間不同,如 整型 int 資料佔4個位元組,字元型 char 資料佔乙個字 節,4整除的起始位置,字元型資料 char 可以存放在任何位址位置 被1整除 短整型 short 資料儲存在位址能被...

簡單的關於sizeof的用法

最近開始複習一下之前的一些知識,當然只是一些我的簡單的見解,如果有錯誤,請諒解,並希望各位能指出我的錯誤,非常感謝!關於sizeof首先我們要明確它是乙個關鍵字,而不是函式 在vi中會變顏色 而sizeof 是用來測出 變數或常量在記憶體中所佔的大小 位元組數 sizeof 用法簡單的有兩種,1 s...