v****s 发帖数: 1112 | 1 const int MAX = 500;
char *src = (char*)malloc(MAX*sizeof(char));
for( int i = 0; i
printf("%d\n",sizeof(src));
结果是4,而不是500,而用 char src[MAX] 就可以得到这个正确的sizeof(src)。
char *src 和 char src[] 都是分配在heap上面的么? sizeof()函数具体是怎么实现
的?
谢谢!! |
h*****0 发帖数: 4889 | 2 我觉得,这个sizeof是编译时决定的,不是运行时决定的……
【在 v****s 的大作中提到】 : const int MAX = 500; : char *src = (char*)malloc(MAX*sizeof(char)); : for( int i = 0; i: printf("%d\n",sizeof(src)); : 结果是4,而不是500,而用 char src[MAX] 就可以得到这个正确的sizeof(src)。 : char *src 和 char src[] 都是分配在heap上面的么? sizeof()函数具体是怎么实现 : 的? : 谢谢!!
|
w*******d 发帖数: 3714 | 3 sizeof又不能知道数组的大小,你以为是matlab啊。。。
【在 v****s 的大作中提到】 : const int MAX = 500; : char *src = (char*)malloc(MAX*sizeof(char)); : for( int i = 0; i: printf("%d\n",sizeof(src)); : 结果是4,而不是500,而用 char src[MAX] 就可以得到这个正确的sizeof(src)。 : char *src 和 char src[] 都是分配在heap上面的么? sizeof()函数具体是怎么实现 : 的? : 谢谢!!
|
z****e 发帖数: 2024 | 4 sizeof(src)是不是指针的大小呀?
size of pointer is different from size of the memory chunk right? |
X****r 发帖数: 3557 | 5 对,sizeof(指针)返回这个指针变量本身的大小,不是它指向的内容或数组的大小。
sizeof(数组)返回整个数组的大小。
【在 z****e 的大作中提到】 : sizeof(src)是不是指针的大小呀? : size of pointer is different from size of the memory chunk right?
|
v****s 发帖数: 1112 | 6 read carefully and try it by yourself, man.
【在 w*******d 的大作中提到】 : sizeof又不能知道数组的大小,你以为是matlab啊。。。
|
v****s 发帖数: 1112 | 7 对!这个我上面已经验证过了。
所以,sizeof(指针)返回4,说明我用的是32位系统。
我想知道的是,这个sizeof()是怎么implement的?而且区别了array和pointer?
【在 X****r 的大作中提到】 : 对,sizeof(指针)返回这个指针变量本身的大小,不是它指向的内容或数组的大小。 : sizeof(数组)返回整个数组的大小。
|
X****r 发帖数: 3557 | 8 sizeof是编译的时候就确定的。编译器自然知道你的某个类型占多少空间。
数组和指针本来就是不同的类型。
【在 v****s 的大作中提到】 : 对!这个我上面已经验证过了。 : 所以,sizeof(指针)返回4,说明我用的是32位系统。 : 我想知道的是,这个sizeof()是怎么implement的?而且区别了array和pointer?
|
v****s 发帖数: 1112 | 9 ok, that makes sense!
thanks!
【在 X****r 的大作中提到】 : sizeof是编译的时候就确定的。编译器自然知道你的某个类型占多少空间。 : 数组和指针本来就是不同的类型。
|
L***n 发帖数: 6727 | 10 不是,compile time 决定
【在 v****s 的大作中提到】 : 对!这个我上面已经验证过了。 : 所以,sizeof(指针)返回4,说明我用的是32位系统。 : 我想知道的是,这个sizeof()是怎么implement的?而且区别了array和pointer?
|
v****s 发帖数: 1112 | 11 thanks, updated!
【在 L***n 的大作中提到】 : 不是,compile time 决定
|
f*****Q 发帖数: 1912 | 12 记得C99不一定是compile time了,具体不记得了。给有兴趣的提个醒。
【在 L***n 的大作中提到】 : 不是,compile time 决定
|
t*****g 发帖数: 1275 | 13 那是对variable length array,C99可以支持了。 对指针还是返回指针大小。
【在 f*****Q 的大作中提到】 : 记得C99不一定是compile time了,具体不记得了。给有兴趣的提个醒。
|
t******r 发帖数: 88 | 14 char src[]是在栈上的
你这个问题,你把src-4打出来看看,就会发现是个比MAX大一点点的数
【在 v****s 的大作中提到】 : const int MAX = 500; : char *src = (char*)malloc(MAX*sizeof(char)); : for( int i = 0; i: printf("%d\n",sizeof(src)); : 结果是4,而不是500,而用 char src[MAX] 就可以得到这个正确的sizeof(src)。 : char *src 和 char src[] 都是分配在heap上面的么? sizeof()函数具体是怎么实现 : 的? : 谢谢!!
|