内存中的C字节指针的C字节

问题描述:

我想要计算一个字符指针在内存中占用多少字节。 指针指向一个有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是正确的格式。 –

char需要一个字节。指向任何东西通常需要4或8个字节,具体取决于架构。当然,一个对象和一个指向它的指针是独立的东西,它们使用单​​独的内存,所以如果一个100字符的字符串使用100或101字节(取决于你如何计数以及如何存储字符串),一个指向它的指针仍将使用4个字节。

通常char是1个字节,并由C和C++标准保证。

您的程序打印分配给b的空间的内存地址。这与保留的内存量无关。

要查看指针在内存中占用的内存量,可以使用sizeof(void *)。值取决于系统,我猜你的是4(32位)

但是,你无法获得指针指向的分配内存量(例如通过malloc)。在一般情况下,您需要在分配过程中存储此信息。在某些情况下,例如通过strdup()进行字符串复制,它将等于字符串+1的长度(对于结尾'\ 0'字符。

不,对于100个字符的字符串,需要100个字节对于'\ 0'字符串终止符+ 1字节 由于您正在打印指向字符的指针值,所以程序返回4字节的整数 char的大小为1字节,并且不依赖于体系结构。 。对建筑,且通常4个字节的32个archs和64位者8字节

你怎么来了:

交流盘带以下程序的字符需要4个字节

首先,编译时,编译器应该产生的警告,您的printf预计的int值,你传递一个char*。使用sizeof()来确定任何类型的内存占用量。

+0

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

听起来好像你还没有掌握指针的概念和他们指出的要清楚的内容 - 公平起来可能会很棘手。

要尝试和改写,指针是保存某个其他元素的地址或位置的东西。根据你所运行的系统,指针本身需要的内存数量会有所不同,但通常是4或8个字节。这与内存使用的区别在于它指向的内容,它可以是从零开始的任何内容,如果它是空指针,则向上。 (顺便说一句,没有标准的方法来找到指针指向的大小,但这是另一个话题。)

无论如何,如果你有一个100个字符的字符串,你会期望分配一个101个字符的缓冲区(作为习惯的问题,允许空间和添加终止空值,以防万一你真的得到完整的100个字符),所以你的程序的内存使用量应该是105或109个字节的缓冲区和一个指向它的指针。

指针char类型的大小是sizeof (int *)字节。

的值是实现定义,但是通常在32位系统的4个字节和在64位的系统的8个字节。要打印系统上的大小,你可以这样做:

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

char型的大小总是1个字节。

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

指针是一个地址的存储器位置。一个100字节的字符串占用100个内存位置。因为它们是连续的,所以可以用单个指针引用字符串,但它仍占用100个内存位置。

如果这是一条街,该字符串是类似于一排房子,每一个都有独立的地址,但你可能指的是所有的人都在街道名称;这与字符串名称或指针指向一系列位置而不是单个位置类似。然而街道仍然占据相同的空间!

这种情况下的指针是4个字节,因为32位处理器使用32位地址,因此它可以寻址2个独立的存储单元(4Gb)。