day8-指针数组(二级指针)、内存空间的申请、const

本文详细介绍了C语言中的内存管理函数如malloc、calloc和realloc的使用方法,并解释了它们之间的区别。同时,文章深入探讨了指针的各种概念,包括野指针、内存泄漏、指针函数和函数指针等,还讲解了如何操作数组和字符串的指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


malloc(size_t);申请一块内存空间,大小为size_t大,返回值是个地址

calloc(size_t,size_t);第一个size_t代表申请的一块有多大,第二个代表申请多少块,返回值是个地址

realloc(void * ,size_t);如果用之前两个申请的空间不够,则用此方法进行修改,void *放申请的首地址,size_t为修改后的内存空间大小


用时需判断申请结果不为null才可用

malloc申请后里面的空间没有初始化,而calloc申请后里面的空间全部初始化为0


野指针:没有指向任何内容的指针

内存泄露:申请的空间没人使用

指针函数:函数,返回值是指针

函数指针:指针指向的是函数 

如:int Maxint a,int b){。。。}在主函数中:int (*p)(int a,int b);

const 只读,两种修饰方式 int 前后

const int a; 把一个整型变量的a变成一个常量

指针常量,指针是常量,指针的内容不可改 int *const p1 = &a; p的值无法更改 

常量指针,常量的指针,指向的东西是一个常量 const int * p2 = &a; *p的值不能改,也就是不能通过p来改变a的值,但a得值是可以改的



对于指向一个数组的指针p p++时,加的是数据类型长度,此时p的地址是下一个元素的地址,因此对于此时的指针p,可加可减,对于数组而言就是指向下一个或者前一个元素.所以当p指向a[i]的首地址时,想让p指向第a[i]元素时,可写成p+i *sizeof(int)


对于a[i]来说,a是一个常量,值为数组首地址,所以不能a++,但是指向a的指针p是一个变量,可以p++,意为下一个元素地址


同一个数组中的两个地址相减时,结果为元素相差的个数,本质是(p2-p1) / sizeof(int),但两个地址相加没有意义


字符串整体是一个常量,如“abcsd”,所以无法改变其中值,所以此时指向此字符串的指针,只能读不能写。


但对于数组而言,数组是一个变量所以其值可改变


二维的字符数组 = 一维的字符串数组,简单来说就是a[i][j]中,i 代表有 i 行一维数组,j 代表每一行有 j


int *p[3] = {&a,&b,&c};  此为一维指针数组,是一个指针数组,每一个元素都是一个地址,数组名p是一个地址,地址值 = 首元素的地址,等同于二级指针,int * * p


%s要的是地址,只是再强调一下


char[3] 则只有char[0] char[1] char[2]三个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值