我想计算一个char指针占用内存的字节数。 指针指向一个包含100个字符的字符串。
根据以下程序,char需要4个字节
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char b;
b = 'b';
printf("%p\n",&b);
system("pause");
return 0;
}
指针是否相同? 因此,对于100个字符的字符串,它在内存中保存了400个字节?
答案 0 :(得分:8)
char
需要一个字节。指向任何东西的指针通常需要4或8个字节,具体取决于架构。当然,一个对象和指向它的指针是不同的东西,它们使用单独的内存,所以如果100-char字符串使用100或101字节(取决于你如何计算以及如何存储字符串),指向它的指针仍将使用4个字节。
答案 1 :(得分:4)
不,对于100个字符的字符串,您需要100个字节+ 1个字节用于&#39; \ 0&#39;字符串终止符。 您的程序返回4字节整数,因为您正在打印指向char的指针的值。 Char的大小为1个字节,不依赖于体系结构。指针的大小取决于体系结构,通常,32位arch为4字节,64位为8字节。
答案 2 :(得分:1)
您的程序打印为b分配的空间的内存地址。它与保留的内存量无关。
要查看指针在内存中占用的内存量,可以使用sizeof(void *)。这个值取决于系统,我想你的系统是4(32位)
但是,您无法获得指针所指向的已分配内存量(例如,通过malloc)。在一般情况下,您需要在分配期间存储它。在某些情况下,例如通过strdup()进行字符串复制,它将等于字符串+ 1的长度(对于结尾的'\ 0'字符。
答案 3 :(得分:1)
听起来好像你没有得到指针的概念与他们指出要清楚的东西 - 从公平起见这可能很棘手。
要尝试改写,指针是保存其他元素的地址或位置的东西。根据您运行的系统,指针本身所需的内存量会有所不同,但通常为4或8个字节。它与内存的使用是分开的,它可以是零,如果它是一个空指针,向上。 (顺便说一下,没有标准的方法来查找指针指向的大小,但这是另一个主题。)
无论如何,如果你有一个100个字符的字符串,你希望分配一个101个字符的缓冲区(作为一个习惯,允许空间并添加一个终止空值,以防万一你真的得到满100个字符),所以你的程序的内存使用量将是105或109字节的缓冲区和一个指向它的指针。
答案 4 :(得分: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!"
个字节。它是字符串中包含尾随空字符的字符数。
答案 5 :(得分:0)
通常char为1个字节,由C和C ++标准保证。
答案 6 :(得分:0)
你怎么想:
根据以下程序,char需要4个字节
首先,你的编译器应该在编译时产生警告,你的printf需要int
值,你传递char*
。使用sizeof()
确定任何类型的内存占用量。
答案 7 :(得分:0)
指针是内存位置的地址。 100字节的字符串占用100个内存位置。因为它们是连续的,所以您可以使用单个指针引用该字符串,但它仍占用100个内存位置。
如果这是一条街道,那么这个字符串类似于一排房子,每个房子都有一个单独的地址,但你可以用街道名称来引用它们;这类似于引用一串位置的字符串名称或指针,而不是一个单独的位置。然而街道仍占据同一个空间!
这种情况下的指针是4个字节,因为32位处理器使用32位地址,因此它可以处理2个 32 离散存储器位置(4Gb)。