C语言基础补充
全部评论
数组名相当于数组第一个元素的指针
一维数组作为函数参数,必须把函数的长度也传进去,如void func(int *arr,int len)
普通数组在栈上分配内存
动态数组在堆上分配内存,如new 和malloc 出来的数组,由堆管理
全局变量由静态区管理
动态数组用delete[] arr来释放,不能只用delete arr
malloc 用free来释放,new用delete来释放
所以最好用动态数组,因为普通数组放在栈上,栈上容量不够
申请内存失败的话,那么程序可能会直接报错。
此时可以加上nothrow关键字,如int *a=(std::nothrow)int[10000]
之后再判断if(a==nullptr)就可以了
int *p,整型指针
int *p[3],一维整型数组指针
int* p(),表示函数的返回值是int的地址
int (*p)(int,int),p是函数指针,函数的返回值是整型
函数指针,函数指针代表函数存放的地址,也就是那段代码段的地址
可以通过函数指针来调用函数,
用函数指针来指向函数的地址,然后通过函数指针来调用函数
原函数的声明int func1(int bh,string str),函数指针的声明int (*pta)(int,string)
func(ba,message)
void (*pfunc)(int,string)
pfunc=func;
(*pfunc)pfunc(bh,message)
引用就是给变量起别名,操作引用就是操作该变量
引用一旦初始化之后,不能再改了,引用有点像指针常量,一旦指出去了,就必须指向那一块
函数传参,有三种形式,地址传递,引用传递,值传递
引用在函数传参时,比用指针传参方便
写法void swap(int &a,int &b),调用函数的时候,用swap(a,b)即可
函数不能返回局部变量的引用,因为局部变量在函数调用完生命周期已经结束了
全局区:静态变量,全局变量
函数的调用可以作为左值,比如一个函数int & func(){ static int a=... return a}
func()=1000,
此时会将a修改成1000
引用其实就是指针常量,指针 常量就是指向不能变,int * const p就是指针常量
常量指针就是只能指向常量,但是可以改变指向,const int *p就是常量指针
在函数中形参可以用const,防止变量被修改,比如 int func(const int &val)
函数是可以有默认值的,比如void func(int a=10,b=20,c=30)
如果有传入参数,那么默认的值会被修改
函数可以有占位参数,比如void func(int a,int ),此时第二个int是占位符
传参时,第二个也得传
函数重载:函数的参数不同,类型不同,或者个数不同,或者顺序不同
相关推荐
点赞 评论 收藏
分享