sizeof是語(yǔ)言s用C語(yǔ)言中的一種單目操作符,它以字節形式給出了其操作數的語(yǔ)言s用存儲大小。操作數可以是語(yǔ)言s用一個(gè)表達式或括在括號內的類(lèi)型名。 ,語(yǔ)言s用(yong),語(yǔ)言s用sizeof(int)返回整型變量所占用的語(yǔ)言s用字節(jie)數,sizeof(char)返回字符變量所占用的??語(yǔ)言s用字節數。
sizeof(type)是C語(yǔ)ヽ(′▽?zhuān)?/言中的一個(gè)ヽ(′?`)ノ運算符,用于計算(suan)數據類(lèi)型或對象所占用的語(yǔ)言s用內存空間大小,單位是語(yǔ)言s用字節,它可以用于ヽ(′?`)ノ計算基本數據類(lèi)型、語(yǔ)言s用數組、語(yǔ)言s用結構體、語(yǔ)言s用聯(lián)合體等的語(yǔ)言s用大小,sizeof()函數的語(yǔ)言s用返回值是一個(gè)整數,表示所操作的數據類(lèi)型或對象在內存中占用的字節數(′?ω?`)。
1、計算基本數據類(lèi)型的大小
include <stdio.h>??int main() { printf("Size of int: %lu bytes", sizeof(int)); printf("Size of float:?? %lu bytes", sizeof(float)ヽ(′ー`)ノ); printf(╬?益?)("Size of double: %lu bytes", sizeof(double)); printf("Size of char: %lu bytes", sizeof(char)); return 0;}2、計算數(?_?;)組的大小
include <stdio.h>int main() { int arr[] = { 1, 2, 3, 4, 5}; printf("Size of arrayヽ(′▽?zhuān)?ノ: %lu bytes", sizeof(arr)); return 0;}3、計算結構體的大小
incl┐(′?`)┌u??de <stdio.h>// 定義一個(gè)結構體類(lèi)型struct Student { int id; char na??me[20]; float score;};int main() { struct Student student1; printf("Size of struct Student: %lu bytes", sizeof(stud??ent1)); return 0;}4、計算指針的大小
include <stdio.h>int main() { int a = 10; int *p = &a; // p指向變量a的地址 int **pp = &p; // pp指向指針p的地址,即指向變量a的地址的指針的地址 int *ptr = (int *)pp; // 將指針變量pp強制轉換為指向int類(lèi)型(xing)的指針,(?_?;)并賦值給ptr printf("Size of int pointer: %lu bytes", sizeof(ptr)); // siz??eof(ptr)的結果是指針變量的大小,而不是它所指向的變量的大小,因為指針本身也需要占用內存空間,輸出結果為8字節,注意:不同編譯(??-)?器可能會(huì )有不同的結果,因為它們可能(′_`)對指針(◎_◎;)的大小有不同的實(shí)現方式,通常情況下,指針的大小至少為8字節,這是因為現代計算機通常使用64位處理器,而指針通常需要64位來(lái)存儲其地址,即使在32位系統上,指針的大小也可(ke)能為8字節,在某些特殊情況下,例如嵌入式系統或舊式計算機上,指針的大小可能僅為4字節或更少。 return 0;}是的,sizeof函數與動(dòng)態(tài)內存分配有關(guān),在使用malloc、calloc、realloc等動(dòng)態(tài)內存分配函數時(shí),可以使用s??i???zeof()函數來(lái)獲取分配內存塊的大小。
include <stdio.h>include <stdlib.h>include <string.h>int main() { int n = 5; // 需要分配(?Д?)的元素個(gè)數,假設為5個(gè)整數+1個(gè)字符串結束符''+1個(gè)空字符''+1個(gè)空字符'0'=9個(gè)字(′ω`*)符長(cháng)度+3個(gè)字節長(cháng)度=12個(gè)字節長(cháng)度的空間大小,??由于字符串以空字符'0'結尾(′?`),所以實(shí)際需要的空(T_T)間大小應該減去???這個(gè)空字符的長(cháng)度,即11個(gè)字節長(cháng)度,總共需要分配11個(gè)字節長(cháng)度的空間,我們可以使用sizeof()函數來(lái)計算這(zhe)個(gè)空間的大?。簊ize?? = sizeof(n)*sizeof(int)+str??len(str)+11;strlen(str)表示字符串str的長(cháng)度,我們ヽ(′?`)ノ可以使用malloc函數來(lái)分配這個(gè)空間:buffer = (int*)malloc(size);如果分配成功,buffer將指向分配的內存塊的起始地址;否??則,程序將報錯并退出。
(作者:網(wǎng)站優(yōu)化)