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是函數的指針