[C++]數組指針,數組引用,函數指針
阿新 • • 發佈:2017-08-06
return != type 數組指針 返回 urn 為什麽 fun 函數指針
數組指針是指一個指向數組的指針,例如有一個數組指針p指向一個數組a[],則 *p是取到這個數組,也就是說 *p=a,因此 **p =a[0],
它的定義為:
int a[10]; int (*c)[10]=&a;
(*c)表示它是一個指針,若不加括號則變成 指針數組 ,[10]表示指向一個長度為10的數組,int 表示數組元素為int
因為函數不能返回數組,所以可以設置返回一個數組指針,即
auto fo2(int (&a)[10]) -> int (*)[10]{ a[5]=10; return &a; }
int (&a)[10] 是一個數組引用,
這裏定義fo2的返回類型用了尾置返回類型,int (*)[10]是返回類型。如果直接定義函數,是
int (*fo2(int (&a)[10]))[10];
還是尾置返回清楚一點,:)
事實上雖然為了用指針指向一個數組可以用 int *p=a這樣的方式,不過其實這裏a跟p是兩個東西,p只不過是指向了a頭元素的地址,
因此sizeof(a) != sizeof(p),這裏也就能理解為什麽要用數組引用了,采用了數組引用後,
int fo(int *p){ return sizeof(p); } int fo1(int (&p)[10]){ return sizeof(p); }
fo1返回的就是正確的數組內存大小。
函數指針:
使用別名的方式:
typedef int (*f)(int);
f func;
直接定義:
int (*func)(int);
func可以指向任意一個參數為int ,返回為int的函數。
還可以定義函數指針數組:
int (*func[10])(int);
其實都跟定義數組差不多,形式上與函數保持一致就行了。
還有諸如指針的指針的引用:
int a; int *p=&a; int **&pp=&p;
引用也只是在名稱前加個引用。
[C++]數組指針,數組引用,函數指針