复杂数组的声明,数组引用,指针数组,数组指针,函数指针,函数指针数组,char指针,char数组,数组做函数形参,数组做函数返回值

复杂数组声明,数组引用,指针数组,数组指针,hint:引用必须初始化

int *ptr[10]//数组内有十个int指针
int &ptr[10]//错误,数组内不能存引用
int (*ptr)[10]=&arr//ptr是指向具有十个int值的数组的指针
int(&ptr)[10]=arr//ptr是对int arr[10]的引用
int*(&ptr)[10]=arr//ptr是对int *arr[10]的引用

char指针,char数组

char a[10]={'1','2','3'}//可以少
下面的很重要
char a[]="abcd"//维度是5,最后存\0;a是一个变量指针,指向内存中变量区
a[6]访问出错
char*b=a;
b[6]可以访问并修改

char *b="abcd";//b是一个常量指针,指向内存的常量区,vs会报错,应该写成下面:
const char*b="abcd";

数组做函数返回值

数组不能被拷贝,所以不能返回数组,但是可以返回数组指针

使用类型别名//https://blog.csdn.net/HeXiQuan123/article/details/93496324
typedef int arr[10]
// arr是一个int[10],数组不能拷贝,所以可以传数组指针
arr* func()//ok
//或者
利用指向数组的指针int(*ptr)[10]
Type(*funcname(paralist))[dimension]
eg.
int(*func(int i))[10]//就等价于arr* func(int i)

//尾置
auto func(int i)-> int(*)[10]//表示函数返回一个指向十个整数的数组的指针

//decltype
decltype(数组名)* func(int i){
    return 数组名//应确保返回类型与decltype的数组名是同样的数组
}

数组做形参

int fun(const int*)
int fun(const int[])
int fun(const int[10])//这里10没有卵用
所以传数组时传的是首元素的指针,数组的长度应该使用两个指针区间,或者指定length来处理

//也可以传递引用,单维数组如下
f(int (&arr)[10])这里的10是必须有的
使用模板可以使得引用不固定参数大小
template<unsigned N,unsigned M>
int fun(const char(&p)[N],const char(&p)[M])

传递多维数组//因为数组第一个元素是个数组,所以首元素的指针是int(*)[10]类型的
int func(int (*matrix)[10])//指向数组的首元素,首元素是由十个整数构成的数组
或
int func(int matrix[][10])//第一个维度会被忽略,有无都可以

三维
int func(int (*matrix)[10][10])
int func(int matrix[][10][10])

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章