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输出结果
可以发现:
1、char int double 各个的sizeof占据的内存字节各个不同,例如int 占4个字节
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
查看评论