複雜數組聲明,數組引用,指針數組,數組指針,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])