学习记录 C语言

(36) 2024-09-03 12:01:01

1.prinft("%d",printf())输出的是值的长度(/n,/t要占一个长度);prinft("%d",scanf())输出值为&的个数。

2.scanf("%d", &judge);
    if(judge == 0) {

        printf("yes\n");
    } else {

        printf("no\n");
    }

    !judge ? printf("yes") : printf("no");    (if else 用三目运算符替代*)

3.int judge;
    scanf("%d", &judge);
    if(judge == 1)    printf("hahaha\n");

    judge == 1 && printf("hahaha\n");  (&&前面满足条件才判断后面)
    judge != 1 || printf("hahaha\n");        (|| 前面不满足体条件才判断后面)

4.   &  转化为二进制进行运算,有0为0,

       | 全0为0,其他情况为1;

       ^   相同为0,不同为1;

        ~  取反

        <<  左边的数乘右边2的N次方

        >>  左边的数除右边2的N次方

5.malloc calloc realloc

malloc 能分配初始空间,没有默认值,追加空间时会找一个新空间并将数据复制过来

calloc 能分配初始空间,有默认值,追加空间时会找一个新空间并将数据复制过来

realloc不能分配初始空间,没有没有默认值,追加空间时:如果空间不足会找一个新空间并将数据复制过来,如果空间足够,直接追加空间。

三者都需要通过free()释放空间。

malloc函数
malloc函数可以从堆上获得指定字节的内存空间,其函数声明如下:

void * malloc(int n);

参数释义:
n:申请空间大小(单个类型大小*总个数)

calloc函数
calloc函数的功能与malloc函数的功能相似,都是从堆分配内存。其函数声明如下:

void *calloc(int n,int size);

参数释义:
size:单个类型大小
n:申请的个数
注意:最后申请空间大小为: n和size相乘

realloc函数
realloc函数的功能比malloc函数和calloc函数的功能更为丰富,可以实现内存分配和内存释放的功能,其函数声明如下:

void * realloc(void * p,int n);

参数释义:
p:堆上已经存在空间的地址
n:空间的大小

使用malloc函数,calloc函数和realloc函数分配的内存空间都要使用free函数或指针参数为NULL的realloc函数来释放。

malloc/calloc/realloc区别总结
相同点:

1.都是从堆上申请空间
2.都需要对返回值判空
3.都需要用户free释放
4.返回值类型相同(void*)
5.都需要类型转化
6.底层实现上是一样的,都需要开辟多余的空间,用来维护申请的空间

不同点:

1.函数名字不同和参数类型不同。
2.calloc会对申请空间初始化,并且初始化为0,而其他两个不会。
3.malloc申请的空间必须使用memset初始化
4.realloc是对已经存在的空间进行调整,当第一个参数传入NULL的时候和malloc一样
调整分为两种情况:
a:调整的空间比原有空间大:

大了一点:多出来的空间小于小于下面空闲的空间;
做法:
1.直接延伸申请空间
2.返回原空间首地址**
大了很多:多出来的空间,大于下面空闲空间
做法:
1.重新开辟新空间
2.将旧空间的内容拷贝到新空间中
3.释放旧空间
4.返回新空间的首地址

b.调整的空间比原有空间小:
做法:
1.将原空间缩小
2 .返回旧空间首地址

6.  直接交换两数值

   a ^= b;
    b ^= a;
    a ^= b;

7.力扣第一题:两数之和

先排序,然后从头尾相加,如果值大就尾移动,值小就头移动。
    

 学习记录 C语言 (https://mushiming.com/)  第1张

8.学习记录 C语言 (https://mushiming.com/)  第2张

 9.数组长度:

int size=sizeof(数组名称)/sizeof(数组类型);

THE END

发表回复