查看堆棧溢出問題討論堆堆棧: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