1 c语言中 ,非0 及true 0 == false
void m03t1(){
// c语言中 ,非0 及true 0 == false
if (0){
printf("这是真\n");
}else{
printf("这是假\n");
}
if (124){
printf("这是真\n");
}else{
printf("这是假\n");
}
if (-3){
printf("这是真\n");
}else{
printf("这是假\n");
}
}
E:\C\Project\C01\cmake-build-debug\C01.exe
这是假
这是真
这是真
Process finished with exit code 0
2 开辟静态区域
void m03t2(){
// 开辟静态区域
// 开辟是直接进栈 ,确认大小
// 栈的大小是有限的 ,下面代码将发生错误
// int bigArr[10 * 1024 * 1024] ; // 10 * 4(int) = 40M //栈溢出
int arr[5];
int i = 9 ;
double sk = 123;
}
3 开辟动态区域 malloc
void m03t3(){
// 开辟动态区域 malloc
// 需要引入 #include <stdlib.h>
int * arr = malloc(10 * 1024 * 1024); // 在堆中开辟 40M 空间 不会堆溢出
// 开辟后续要手动释放内存
free(arr);
// 需要把指针置空 ,否者该指针就成为了 悬空指针
arr = NULL ;
}
4 静态开辟的内存空间大小,是不能修改的,如果不需要动态修改空间大小,当然使用 栈区 【尽量使用 静态开辟的,如果实在是需要动态改变才使用malloc
void m03t4(){
// 静态开辟的内存空间大小,是不能修改的,如果不需要动态修改空间大小,
// 当然使用 栈区 【尽量使用 静态开辟的,如果实在是需要动态改变才使用malloc】
int num = 5 ;
// 开辟的大小 与类型有关
int * arr = (int *) malloc(sizeof(int) * num);
double * doubleArr = (double *) malloc(sizeof(double) * num);
if (doubleArr){
free(doubleArr);
doubleArr = NULL ;
}
//realloc() 函数 重新分配内存地址 ,
int new_num = 10 ;
// 第一个参数是 原数组的指针
// 第二个参数是 新数组的总大小
// 如果内存空间足够 ,新的arr地址 将会从arr 原地址往后延伸
// 如果内存空间不够延续时 ,会复制旧数据,找到一块新足够长的地址进行复制操作
// 如果内存空间不够延续,并且也找不到足够长的地址时 ,将会重建失败
int * arr2 = realloc(arr ,sizeof(int) * new_num);
// arr2 不等于空 非0即true
// arr2 成功后 ,会释放掉原来arr的指针,重新返回一个指针,
// 虽然返回的指针有可能和原来的指针一样,即不能再次释放掉原来的指针。
if (arr2){
free(arr2);
arr2 = NULL ;
arr = NULL ;
}else{
free(arr);
arr = NULL ;
}
}