簡體   English   中英

指向 char 的指針數組的大小

[英]Size of array of pointers to char

我打印了這個全局變量的大小,output 是 20。我試圖理解它為什么不只是 15,因為有 5 個元素,每個元素的大小都是 3(包括每個元素末尾的 \0)。

#include <stdio.h>

char* arrChar[5] = { "hh","jj","kk","zz","xx" };

int main()
{
printf("size = %d\n", sizeof(arrChar));
}

我不知道是否有聯系,但如果我們在這里合並所有數字,它將是 20,我仍然不明白元素的數量 (5) 是如何添加到數組 (15) 中的元素的大小的有任何意義。

在此處輸入圖像描述

你是正確的,在 memory 的某個地方占用了 15 個字節。 但這些信息通常是沒有用的。

對於char str[] = "1"; , sizeof(str)sizeof(char*)相同,它始終是指針的大小(在 32 位設置中為 4 個字節)

對於char str[] = "1234567"; sizeof(str)仍然相同(使用strlen作為字符串的長度)

如果你有 5 個str ,那么它的大小是 4 x 5。

您可以使用sizeof(arrChar)/sizeof(*arrChar)來獲取數組中的元素總數。

在您的示例中,實際數據是存儲在 memory 的某些只讀部分中的字符串文字。 數據沒有在arrChar內部分配,只是數據的地址。

無論您將每個指針設置為指向什么, sizeof(arrChar)都將始終產生sizeof(char*) * 5 如果指針大小為 4 字節,則 4*5=20。

*char 指針每個元素占用 4 位。 由於您的列表中有 5 個元素,即使是普通的 char 也占用 3 位,但由於您的指針占用 4 位,所以它需要 20 位,而不是 15 位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM