1. 程式人生 > >[C++]數組指針,數組引用,函數指針

[C++]數組指針,數組引用,函數指針

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++]數組指針,數組引用,函數指針