飞道的博客

C语言里面的sizeof和malloc反向认识

258人阅读  评论(0)

1.环境

windows10 64位
MinGW64

2.几种类型的sizeof计算的大小

2.1代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
   

    printf("sizeof(char)=%d\tsizeof(char*)=%d\n", sizeof(char), sizeof(char *));
    printf("sizeof(int)=%d\tsizeof(int*)=%d\n", sizeof(int), sizeof(int *));
    printf("sizeof(double)=%d\tsizeof(double*)=%d\n", sizeof(double), sizeof(double *));

    return 0;
}

2.2输出结果

可以发现:
1char int double 各个的sizeof占据的内存字节各个不同,例如int4个字节
2、而int * char * 等指针类型的都是  8个字节

2.3问题 int a[],这里的这个a呐

我们知道  int  a[],这里的a就是一个指针,那这个指针的大小是不是我们和上述一样呐?

2.3.1 代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
   

    int a[6] = {
   3};
    printf("%d", sizeof(a));

    return 0;
}

2.3.2 输出结果

2.3.3 分析与结论

这里看到,啊这个a不是上面的那种 8 
解释:应该是这种a不可修改了,是特殊的方式,具体还得看别人的
简单理解就是知道,这种就是  6*4=24个字节了。

3.malloc();动态分配大小

3.0 对malloc()函数的用法解释

# include <stdlib.c>   //需要引入这个lib库
 int *a = (int *)malloc(n*sizeof(int));   //动态分配
    //对这个指针当作数组的哪个变量使用  --a[i]这样用
free(a)   //释放(必须)

3.1代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
   
    int n;
    scanf("%d", &n);
    //C99语法
    int a[n];
    printf("sizeof(a)=%d\n", sizeof(a));
    //动态分配
    int *b = (int *)sizeof(n * sizeof(int));
    printf("sizeof(b)=%d\n", sizeof(b));
    printf("sizeof(*b)=%d\n", sizeof(*b));
//释放
    free(b);

    return 0;
}

3.2输出结果

3.3 分析理解

仔细看这里的sizeof(b)  -->这里的b就是指针类型的所以大小就是8,
并不是那个5*4,但是这里的b可以这样  b[23]=123;这样当成指针使用
sizeof(*b)这其实就是那个int类型的,所以是4

时间有限下课


转载:https://blog.csdn.net/qq_44218805/article/details/117002878
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场