指針數組與指向數組的指針


1、int (*a)[10]-->指向數組的指針

a是一個二級指針,可認為是一個二維數組的首地址,指向一個一維數組,數組存儲了10個int數據。

int arr1[10];             // 一維數組
int arr2[2][10];          // 二維數組

int (*a)[10] = &arr1;     // a為指向一維數組的指針
int (*b)[10] = arr2;      // b為指向一維數組的指針
// 指向一維數組(維度為10)的指針,其實是一個二級指針,用來接收二維數組的(二維數組變量名就是一個二級指針)。

2、int *a[10]-->指針數組

a是一個一級指針,是數組的首地址,指向一個int指針數據,數組存了10個int指針

int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *a[10] = {&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9]};
for(int i=0; i<10; ++i) {
    cout<<*a[i]<<endl;
}

  

 變量定義分3個部分:

1、變量存儲數據的類型

2、變量本身的類型(普通變量,指針,引用)

3、變量是否是數組

int a;   
// 第一部分:int,表示變量存儲的是int類型數據
// 第二部分:a,表示普通變量
// 第三部分:沒有第三部分,說明不是數組
// 三部分組合在一起的含義就是:普通變量,存儲的類型是int

int *a--->(int*)a;
// 第一部分:int *,表示變量存儲的是一個int類型的指針
// 第二部分:a,表示普通變量
// 第三部分:沒有第三部分,說明不是數組
// 三部分組合在一起的含義就是:普通變量,存儲的類型是int*
// using int_ptr = int *; int *a == int_ptr a;

int *a[10]--->(int*)a[10];
// 第一部分:int *,表示變量存儲的是一個int類型的指針
// 第二部分:a,表示普通變量
// 第三部分:[10]表示是數組變量
// 三部分組合在一起的含義就是:一個長度為10的數組,存儲的類型是int*

int (*a)[10];
// 第一部分:int,表示變量存儲的是一個int類型的數據
// 第二部分:*a,表示指針變量
// 第三部分:[10]表示是數組變量
// 三部分組合在一起的含義就是:指針變量a指向一個長度為10的數組,數組存儲的是int類型數據

int (&a)[10];
// 第一部分:int,表示變量存儲的是一個int類型的數據
// 第二部分:&a,表示引用變量
// 第三部分:[10]表示是數組變量
// 三部分組合在一起的含義就是:變量a引用一個長度為10的數組,數組存儲的是int類型數據

int *(*a)[10];
// 第一部分:int*,表示變量存儲的是一個int類型的數據
// 第二部分:*a,表示指針變量
// 第三部分:[10]表示是數組變量
// 三部分組合在一起的含義就是:指針變量a指向一個長度為10的數組,數組存儲的是int*類型數據

int *func();
// 第一部分:int *,表示變量存儲的是一個int類型的指針
// 第二部分:func,表示普通變量
// 第三部分:(),表示是函數變量。
// 三部分組合在一起的含義就是:返回指針int*類型的函數
// func是函數

int (*func)();
// 第一部分:int ,表示變量存儲的是一個int類型的數據
// 第二部分:*func,表示指針變量
// 第三部分:(),表示是函數變量。
// 三部分組合在一起的含義就是:返回int類型的函數的指針
// func是函數的指針

int *(*func)();
// 第一部分:int* ,表示變量存儲的是一個int類型的指針
// 第二部分:*func,表示指針變量
// 第三部分:(),表示是函數變量。
// 三部分組合在一起的含義就是:返回int*類型的函數的指針
// func是函數的指針

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM