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

 

 

 

 

 

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