栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 学习笔记 2021年11月16日

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 学习笔记 2021年11月16日

指针数组与数组指针:
        指针数组:
                是由指针变量组成的数组,它的成员都是类型相同的指针变量
                int *arr[10]
        数组指针:
                专门指向数组的指针
                int (*p)[长度]
        注意:一般在使用堆内存时,可能会使用它们来定义二维数组

指针与数组名:
        数组名就是一种特殊的指针,它是常量,不能修改它的值,它与数组的内存首地址之间是映射关系,它是没有自己的存储空间
        指针变量有自己的存储空间,是可以被修改的,如果它存储的是数组的内存首地址, 那么指针变量可以当作数组一样使用,数组名也可以当作指针一样使用
                数组名[i] == *(数组名+i)
                *(指针名+I) == 指针名[i]

二级指针:
        指向指针的指针就是二级指针,里面存储的是指针变量的地址
        定义:
                类型** 指针名_pp;
        赋值
                指针名_pp = &指针变量;
        解引用:
                *指针名_pp <==> 指针变量
                **指针名_pp <==> *指针变量 <==> 普通变量
        注意:当需要共享指针变量时,就必须使用二级指针

函数指针:
        函数名就是一个地址(整数),它代表了本函数在代码段中的位置

        函数指针就是专门指向函数的指针,里面存储的是函数在代码段中的首地址
        返回值(*函数指针名p)(参数列表)

        int scanf(const char *format,...):
        重定义scanf函数指针类型:
                typedef int (*funcp)(const char*,...):
                funcp fp;        //fp是scanf函数指针变量

        回调:
                把A函数指针作为B函数的参数传递给B函数,这样做叫做函数回调

堆内存:
什么是堆内存:
        是进程的一个内存段(test,data,bss,heap,stack),由程序员手动管理
        优点:足够大        缺点:使用麻烦
为什么要使用堆内存:
        1、随着程序的复杂,数据量变多
        2、其他内存段的申请、释放不受控制,堆内存的申请、释放是受控制的
如何使用堆内存:
注意:C语言中没有能够控制堆内存的语句,只能使用c标准库中的函数来控制内存
#include

void *malloc(size_t size);
功能:从堆内存中申请size个字节的内存,申请到的内存中是什么数据不确定
size:想要申请的字节数
返回值: 成功返回申请到的内存首地址,失败返回NULL

void free(void *ptr):
功能:释放一块堆内存
ptr:想要释放的内存首地址
注意:不能释放非法地址,不能连续释放,但是空指针可以free,还可以连续free(NULL)

注意:释放的仅仅是所有权,里面的数据不会被清理

void *calloc(size_t nmemb,size_t size);
功能:从堆内存中申请nmemb块size个字节的内存,申请到的内存会被初始化为0
返回值:成功返回申请到的内存的首地址,失败返回NULL
注意:申请到时依然是一块连续的内存

void *realloc(void *ptr, size_t size);
功能:改变已有堆内存块的大小
ptr:要调整的堆内存的首地址
size:调整后的字节数
返回值:成功返回调整后的内存的首地址,失败返回NULL
注意:一定要重新接受调整后的内存首地址,有可能不是在原位置上调大调小
        如果无法在原位置调整大小:
                1、申请一块新的符合调整后大小的内存块
                2、把原内存中内容拷贝到新内存去
                3、把原内存释放掉,返回新内存块首地址

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号