查看堆栈溢出问题讨论堆堆栈:What and where are the stack and heap。上堆元件
sizeof()
,如指针,将返回指针的大小,元件,该指针可以存储的数量不限。
但是,堆栈元素:数组或const char *
上的sizeof()
将返回数组或字符串的长度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 100
int main(int argc, char *argv[])
{
char *a = NULL;
char b[10] = "abcdefghi";
printf("sizeof(b): %zu\n", sizeof(b));
a = malloc(LENGTH + 1);
if (a) {
*(a + LENGTH) = '\0';
memset(a, ' ', LENGTH);
fprintf(stdout, "a (before memcpy):\t[%s]\n", a);
printf("sizeof(a), before: %zu\n", sizeof(a));
memcpy(a, b, sizeof(b) - 1);
fprintf(stdout, "a (after memcpy):\t[%s]\n", a);
printf("sizeof(a), after: %zu\n", sizeof(a));
free(a);
}
return EXIT_SUCCESS;
}
编译:
$ gcc -Wall sizeofTest.c -o sizeofTest
输出:
$ ./sizeofTest
sizeof(b): 10
a (before memcpy): [ ]
sizeof(a), before: 8
a (after memcpy): [abcdefghi ]
sizeof(a), after: 8
在我的平台,char *
点,占用8个字节的内存地址。
请您发表一个当这不起作用的例子,包括源代码? – 2012-08-05 22:36:33
它在标识符(变量)用于对象时起作用;当标识符是指向对象的指针时它不起作用。 – pmg 2012-08-05 22:37:51
'sizeof'应用于括号中的类型,给出了类型的大小。应用于表达式时,不带括号,它给出了表达式类型的大小。 – 2012-08-05 22:46:21