typedef struct {
char valid;
char tag;
char block[4];
} line;
我相信它是6,因爲block[]
是4,每個char是1個字節。這是在x86機器上。 valid
和tag
之間是否有偏移?應該是8嗎?這個結構的大小是多少?
typedef struct {
char valid;
char tag;
char block[4];
} line;
我相信它是6,因爲block[]
是4,每個char是1個字節。這是在x86機器上。 valid
和tag
之間是否有偏移?應該是8嗎?這個結構的大小是多少?
這是6.簡單的調用sizeof將證實這一點。 這是問題還是有任何其他問題有關填充結構?
如果您希望結構的大小使用sizeof
運算符。
例如
size_t struct_size = sizeof(line);
它以字節爲單位返回結構體的大小。請注意sizeof(char)== 1總是,所以在技術上字節並不總是意味着8位。
從C:TCN, "Page 348" at the bottom of the page: -
這在理論上可以爲機器擁有煤焦大於8 位,雖然它不是託管環境(基本上, 臺式電腦等非常普遍 - - 所需的唯一環境甚至具有開始的功能)。
在這樣一臺機器, 出乎很多人的意料,的sizeof(char)的仍是1; 更改的值是CHAR_BIT。與此相關的是,在這樣的機器上,int可能仍然有它的要求範圍 ,但是它的大小與char相同。
因此,這樣的機器上,有 可能存在無符號字符中的至少一個值,使得,轉換 爲int,這是一個負值,並與等於EOF。然而,據我所知,所有提供了getchar()函數和相關函數的這樣的系統已經確保實際上EOF值不同於實際上可以從文件中被讀取的任何值 。例如,char可以是32位類型,但在讀取文件中的「字符」時, 仍然只能看到值0-255。
從WG14 n1256 - 部分6.5.3.4:
sizeof運算符產生大小(以字節計)其操作數的 ...當應用於具有類型,無符號字符中的操作數,或有符號字符, (或其合格版本)結果爲1.
* ...技術上字節並不總是意味着8位。* - 我可以知道嗎?你的答案還不清楚。 –
@Am_I_Helpful C不要求char是8位,sizeof(char)== 1。如果由於某種原因char是32位,那麼32位是一個字節。我已經看到了通常用作最小信息單元的術語字節;我不認爲它需要8位。請參閱本頁的第348部分(靠近底部):https://www.seebs.net/c/c_tcn4e.html –
我正在對我們的答案進行必要的編輯以突出顯示這些行。 –
只需使用sizeof。這裏是一個程序來告訴你線的大小:
#include <stdio.h>
typedef struct {
char valid;
char tag;
char block[4];
} line;
int main(void) {
printf("%zu\n", sizeof(line));
return 0;
}
您可以使用sizeof
函數獲取已用內存來分配該結構。
printf("%i" , sizeof(line));
'printf(「%zu」,sizeof line);'可能會告訴你嗎? – kaylum
這是編譯器,系統/對齊依賴。編譯器或系統如何處理填充將導致計數因編譯器到編譯器等而異。 –
C規範強加的唯一限制是在「有效」之前不能有填充。編譯器可以根據需要在成員之間放置儘可能多的填充,並在結構的末尾放置填充。 – user3386109