动态分配的数组使用sizeof()

#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;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34941153/article/details/89921437