指標陣列是陣列,是乙個存放指標的陣列。eg:
int *arr1[10];//整形指標陣列,有十個元素,每個元素都是整形指標。
char *arr2[4];//字元指標陣列,有四個元素,每個元素都是字元指標。
char **arr3[5];//陣列有5個元素,每個元素是字元型的二級指標。
陣列指標是指標,是乙個指向陣列的指標。eg:
int *p[10]; //整形指標陣列
int (*p)[10]; //陣列指標
// 解釋: p 先和 * 結合,說明 p 是⼀個指標變數,然後指向的是⼀個⼤小
//為10的整型陣列。所以p是⼀個指標,指向⼀個陣列,叫陣列指標。
// 這裡要注意: 的優先順序要⾼高於 * 號的,所以必須加上()來保證 p 先和 * 結合
首先我們來看一段**:
int arr[10] = ;
arr;// 表示陣列首元素的位址
&arr;// 表示陣列的位址
// 具體差異在哪?
printf("%p\n", arr);
printf("%p\n", arr+1);
printf("%p\n", &arr+1); // 我們可以看出產生的結果是截然不同的
// 這裡是因為陣列的位址和陣列首元素的位址值是相同的,但是意義不同。
那麼陣列的位址如何來儲存?
int arr[10] = ;
int*p1 = &arr;
int (*p2)[10] = &arr;
//很明顯,p2是比較適合的選擇
//p2是陣列指標,所以存放陣列的位址是合適的
如果我們要將乙個二維陣列傳參,我們怎麼做?
// 測試
void test()
;
print(arr);// 這裡 print 函式的引數如何設計?
}void print(int arr[3][5])//ok?
{} void print(int arr[5])//ok?
{} void print(int **arr)//ok? 陣列的位址放到二級指標明顯不合適
{} void print(int (*arr)[5])//ok? 陣列的位址放到陣列指標是合適的
{}
上⾯我們了解了【陣列指標】和【指標陣列】之後我們看看下面的**:
int arr[5]; //整形陣列
int *parr1[10]; //指標陣列
int (*parr2)[10]; //陣列指標
int (*parr3[10])[5];
//存放陣列指標的陣列:parr3先和結合,說明是乙個陣列,有十個元素,
//每乙個元素是陣列指標,指向乙個大小為5個整形的陣列。
⾸先看⼀段**:
#include
void test()
int main()
void test()
// 下面 pfun1 和 pfun2 哪個有能力存放 test 函式的位址?
void (*pfun1)();
void *pfun2();
pfun1可以存放。pfun1先和*結合,說明pfun1是指標,指標指向的是⼀個函式,指向的函式無引數,返回值型別為void。陣列是⼀個存放相同型別資料的儲存空間,那我們已經學習了指標陣列, 比如:
int *arr[10];
// 陣列的每個元素是 int*
那要把函式的位址存到乙個陣列中,那這個陣列就叫函式指標陣列,那函式指標的陣列如何定義 呢?
int (*parr1[10]])();
int *parr2[10]();
int (*)() parr3[10];
答案是:parr1
parr1 先和 [ ]結合,說明parr1是陣列,陣列的內容是什麼呢? 是 int (*)() 型別的函式指標
函式指標陣列的用途:轉移表
例子:(計算器)
指向函式指標陣列的指標是乙個指標
指標指向乙個陣列 ,陣列的元素都是函式指標 ;
如何定義?
void test(const
char* str)
int main()
關於C指標的一些理解
有時總被指標的用法及型別所困擾,那我簡單理解一下指標。指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。如下例子 1 int ptr 2 cha...
一些面試題 關於指標的一些理解
1 main int ptr int a 1 printf d,d a 1 ptr 1 答 2,5 a 1 就是a 1 ptr 1 就是a 4 執行結果是2,5 a 1不是首位址 1,系統會認為加乙個a陣列的偏移,是偏移了乙個陣列的大小 本例是5個int int ptr int a 1 則ptr實際...
關於陣列和指標的一些理解
int a 3 int b a cout b 了解了上述原理後,我們來看看下面這種情況。陣列建立的方式有兩種。第一種 int arr new int 2 cout arr 第二種情況 int arr cout arr 第乙個輸出,接受引數是乙個陣列,隱式轉換成陣列首位址。第二個輸出 arr,這得到的...