malloc(size_t);申请一块内存空间,大小为size_t大,返回值是个地址
calloc(size_t,size_t);第一个size_t代表申请的一块有多大,第二个代表申请多少块,返回值是个地址
realloc(void * ,size_t);如果用之前两个申请的空间不够,则用此方法进行修改,void *放申请的首地址,size_t为修改后的内存空间大小
用时需判断申请结果不为null才可用
malloc申请后里面的空间没有初始化,而calloc申请后里面的空间全部初始化为0
如:int Max(int 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]三个