#include <stdio.h>
#include <string.h>
#include <algorithm>
int main()
{
int a[5]={0,1,2,3,4};
int *b;
b=(int *)malloc(5*sizeof(int));//malloc需要调用<algorithm>
memset(b,0,5*sizeof(int));//memset需要调用<string.h>
printf("sizeof(a)=%d\n",sizeof(a));
printf("sizeof(b)=%d\n",sizeof(b));
return 0;
}
运行结果:
sizeof返回的是字节数。可以看到,sizeof(a)是20个字节,sizeof(b)是4个字节,也就是说sizeof(b)只是求出了指针b的大小。
mark一下,这样用sizeof()无法求出动态分配数组的大小。
产生这个疑惑的原因是,我用memset(b,0,sizeof(b))的时候,发现只有b[0]被赋值为0,后面的都没有被赋值为0。
int main()
{
int a[5]={0,1,2,3,4};
int *b;
b=(int *)malloc(5*sizeof(int));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
printf("sizeof(a)=%d\n",sizeof(a));
printf("sizeof(b)=%d\n",sizeof(b));
printf("\n");
for(int i=0;i<5;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("\n");
for(int i=0;i<5;i++)
{
printf("b[%d]=%d\n",i,b[i]);
}
return 0;
}