我試圖通過確定以下變數的大小來學習如何在 C 中使用 sizeof() 。有人可以告訴我我是對還是錯?我不確定我是否理解這個概念。
int x[] = {5, 6, 7};
float y[5];
double d;
char c[5] = {1, 2};
sizeof(x): 3 --- 因為陣列有 3 個元素
sizeof(y): 5 --- 陣列有 5 個元素
sizeof(d): 8 --- 總是 double 的大小
sizeof(c): 5 --- 陣列有 5 個元素
uj5u.com熱心網友回復:
該sizeof運算子為您提供存盤資料所需的 char-equivalent (1)項的數量,而不是陣列(2)中的元素數量。
因此,對于 32 位整數、8 位字符、“普通”IEEE-854 實作(32 位單精度和 64 位雙精度),您會看到12、20、8和5,盡管這確實取決于重在落實。
(1)我說“char-equivalent”以確保不會混淆。在 C 中,它實際上是“位元組”,因為 C 將位元組定義為單個 的大小char,而不是8 位值(許多標準傾向于對后者使用八位位元組)。換句話說,永遠sizeof(char)是一。
(2)要計算陣列大小,可以將整個陣列的大小除以第一個元素的大小:
int xyzzy[] = {1, 2, 3};
int num_elems = sizeof(xyzzy) / sizeof(*xyzzy);
uj5u.com熱心網友回復:
該運算子以位元組為單位sizeof告訴您其運算元的大小。
所以假設anint是4個位元組,afloat是4個位元組,根據定義achar是1個位元組,那么:
sizeof(x)= 12sizeof(y)= 20sizeof(c)= 5
uj5u.com熱心網友回復:
其他人指出你的理解是錯誤的。但是,由于您在問題中提到了陣列,因此值得向您展示一個非常常見的 c 習語
把你的
int x[] = {5, 6, 7};
你會看到這個
int xLen = sizeof(x)/sizeof(x[0]);
即用陣列的長度除以每個元素的大小,以確定給定陣列中有多少元素
在你的情況下(假設一個 int 有 4 個位元組)
int xLen = 12/4;
即3
uj5u.com熱心網友回復:
就像一個附錄:當您開始使用結構時,填充可能sizeof無法按您預期的方式作業。
struct A {
char b[3];
};
對于上述情況,sizeof(struct A)(無論如何在我的機器上)回傳3.
但是如果我在結構中添加一個四個位元組int:
struct A {
char b[3];
int c;
};
現在sizeof(struct A)不回來了,而是。78
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427871.html
標籤:C
上一篇:C位明智而不是運算子更改值型別?
下一篇:WASM&C:找不到功能
