2012-01-21 48 views
0

我想要計算一個字符指針在內存中佔用多少字節。 指針指向一個有100個字符的字符串。內存中的C字節指針的C字節

按照以下程序的字符需要4個字節

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    char b; 
    b = 'b'; 
    printf("%p\n",&b); 

    system("pause"); 
    return 0; 
} 

是否同爲指針? 因此,400字節保存在內存中的字符串爲100個字符?

+3

問題是沒有意義的 - 如何打印字符變量高大你任何關於指針的大小*地址*? –

+1

你發佈的代碼中沒有提及任何東西的大小。請澄清一下,如果您詢問指向字符的指針大小,指針指向的內容或其他內容。 – Mat

+1

不要使用%d打印指針的內容,這是針對「int」的。指針可能與「int」的寬度不同。 %p是正確的格式。 –

回答

7

char需要一個字節。指向任何東西通常需要4或8個字節,具體取決於架構。當然,一個對象和一個指向它的指針是獨立的東西,它們使用單​​獨的內存,所以如果一個100字符的字符串使用100或101字節(取決於你如何計數以及如何存儲字符串),一個指向它的指針仍將使用4個字節。

0

通常char是1個字節,並由C和C++標準保證。

1

您的程序打印分配給b的空間的內存地址。這與保留的內存量無關。

要查看指針在內存中佔用的內存量,可以使用sizeof(void *)。值取決於系統,我猜你的是4(32位)

但是,你無法獲得指針指向的分配內存量(例如通過malloc)。在一般情況下,您需要在分配過程中存儲此信息。在某些情況下,例如通過strdup()進行字符串複製,它將等於字符串+1的長度(對於結尾'\ 0'字符。

4

不,對於100個字符的字符串,需要100個字節對於'\ 0'字符串終止符+ 1字節 由於您正在打印指向字符的指針值,所以程序返回4字節的整數 char的大小爲1字節,並且不依賴於體系結構。 。對建築,且通常4個字節的32個archs和64位者8字節

0

你怎麼來了:

交流盤帶以下程序的字符需要4個字節

首先,編譯時,編譯器應該產生的警告,您的printf預計的int值,你傳遞一個char*。使用sizeof()來確定任何類型的內存佔用量。

+0

我很抱歉這是%p,而不是%d。 – user494766

1

聽起來好像你還沒有掌握指針的概念和他們指出的要清楚的內容 - 公平起來可能會很棘手。

要嘗試和改寫,指針是保存某個其他元素的地址或位置的東西。根據你所運行的系統,指針本身需要的內存數量會有所不同,但通常是4或8個字節。這與內存使用的區別在於它指向的內容,它可以是從零開始的任何內容,如果它是空指針,則向上。 (順便說一句,沒有標準的方法來找到指針指向的大小,但這是另一個話題。)

無論如何,如果你有一個100個字符的字符串,你會期望分配一個101個字符的緩衝區(作爲習慣的問題,允許空間和添加終止空值,以防萬一你真的得到完整的100個字符),所以你的程序的內存使用量應該是105或109個字節的緩衝區和一個指向它的指針。

1

指針char類型的大小是sizeof (int *)字節。

的值是實現定義,但是通常在32位系統的4個字節和在64位的系統的8個字節。要打印系統上的大小,你可以這樣做:

printf("%zu\n", sizeof (char *)); 

char型的大小總是1個字節。

字符串的大小是sizeof the_string_array_object字節。例如,字符串"Hello world!"的大小是sizeof "Hello world!"字節。它是包含尾部空字符的字符串中的字符數。

0

指針是一個地址的存儲器位置。一個100字節的字符串佔用100個內存位置。因爲它們是連續的,所以可以用單個指針引用字符串,但它仍佔用100個內存位置。

如果這是一條街,該字符串是類似於一排房子,每一個都有獨立的地址,但你可能指的是所有的人都在街道名稱;這與字符串名稱或指針指向一系列位置而不是單個位置類似。然而街道仍然佔據相同的空間!

這種情況下的指針是4個字節,因爲32位處理器使用32位地址,因此它可以尋址2個獨立的存儲單元(4Gb)。