關於指標的一些理解

2021-08-20 01:38:20 字數 2381 閱讀 3141

指標陣列是陣列,是乙個存放指標的陣列。

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,這得到的...