标签:调用函数 单位 amp 指定 ima user 成功 加减法 存储
1 我们在堆中申请的字节空间,如果不主动释放,那么系统就不会释放的,除非程序结束了
在堆中申请字节空间的步骤
如何在堆区申请指定字节数的空间呢?
malloc 函数
// malloc()函数
int * num = malloc(24); // 在堆中申请连续的四个字节空间,并将第一个字节的地址返回来,所以要用指针接收
num[0] = 1;
// int len = sizeof(num) / sizeof(int);
for (int i = 0; i < 6; i++) {
num[i] = i;
};
for (int i = 0; i < 6; i++) {
printf("num[%i] = %i\n",i,num[i]);
};
*(num) = 1;
*(num+1) = 2;
*(num+2) = 3;
*(num+3) = 4;
*(num+4) = 5;
*(num+5) = 6;
// 可以使用[]号对其赋值,或者使用指针与整数的加减法对其进行赋值
// 这样可以对申请的 24 个字节空间以四个字节为一个单位进行赋值,
int * num = malloc(4); // 在堆中申请连续的四个字节空间,并将第一个字节的地址返回来,所以要用指针接收
int * num1 = malloc(4);
int * num2 = malloc(4);
printf("num的地址:%p\n",num);
printf("num1的地址:%p\n",num1);
printf("num2的地址:%p\n",num2);
// 输出内容:
num的地址:0x1007311a0
num1的地址:0x10072ef60
num2的地址:0x10072d6e0
int *num = malloc(12);
for (int i = 0; i < 3; i++) {
printf("num[%i] = %i\n",i,*(num+i));
printf("num[%i]的地址:%p\n",i,&num[i]);
}
// 如果申请失败返回的指针是NULL,所以申请完最好自己判断下是否成功
int* num = malloc(12);
num[0] = 1;
num[1] = 2;
num[2] = 3;
if(num != NULL){ // if(num)也可以,null 代表的就是 0,如果不是 0 那么就进入
for (int i = 0; i < 3; i++) {
num[i] = num[i] * 100;
}
for (int i = 0; i < 3; i++) {
printf("num[%i] = %i\n",i,num[i]);
}
}
free(num);
// calooc 函数
int *num = calloc(3, sizeof(int)); // 申请三个,int 类型的空间地址
if(num){
for (int i = 0; i < 3; i++) {
num[i] = i * 10;
}
for (int i = 0; i < 3; i++) {
printf("num[%i] = %i\n",i,num[i]);
}
}
// calooc 函数
int *num = calloc(3, sizeof(int)); // 申请三个,int 类型的空间地址
if(num){
for (int i = 0; i < 3; i++) {
printf("num[%i] = %i\n",i,num[i]);
}
}
// 控制台输出
num[0] = 0
num[1] = 0
num[2] = 0
int * num1 = realloc(num, 4);// 发现 calloc 申请的 3 个 int 类型空间不够用了,那么就用 realloc 进行扩容
// 如果 calloc 申请的3e个 int 类型空间后面的地址够用,那就跟着后面申请
// 如果 calloc 申请的 3 个 int 类型空间后面的地址不够用,那就在堆区重新找一块地址,并且将原来 calloc 申请的地址复制过来,并将低字节地址返回
if(num1){
for (int i = 0; i < 4; i++) {
num1[i] = i * 10;
}
for (int i = 0; i < 4; i++) {
printf("num1[%i] = %i\n",i,num1[i]);
}
free(num1);
};
C语言-malloc,calloc,realloc 函数的使用(堆空间的使用)
标签:调用函数 单位 amp 指定 ima user 成功 加减法 存储
原文地址:https://www.cnblogs.com/shanshan-test/p/13110986.html