簡單分析C語言中指標陣列與陣列指標的區別

2022-10-04 02:00:08 字數 1343 閱讀 7359

首先來分別看一下,指標陣列的乙個小例子:

#include

#include

int lookup_keyword(const char*key, const char* table, const int size) ;

printf("%d\n", lookup_keyword("static", keyword, dim(keyword)));

return 0;

} 陣列指標:

#include

int main()

這兩個名字不同當然所代表的意思也就不同。我剛開始看到這就嚇到了,主要是中文太博大精深了程式設計客棧,整這樣的簡稱太專業了,把人都繞暈了。從英文解釋或中文全稱看就比較容易理解。

指fjcgcklxx針陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標

陣列指標:a pointer to an array,即指向陣列的指標

還要注意的是他們用法的區別,下面舉例說明。

int* a[4]     指標陣列    

表示:陣列a中的元素都為int型指標   

元素表示:*a[i]   *(a[i])是一樣的,因為優先順序高於*

int (*a)[4]   陣列指標    

&nb程式設計客棧sp;        表示:指向陣列a的指標

程式設計客棧;            元素表示:(*a)[i] 

注意:在實際應用中,對於指標陣列,我們經常這樣使用:

typedef int* pint;

pint a[4];

這跟上面指標陣列定義所表達的意思是一樣的,只不過採取了型別變換。

**演示如下:

#include

using namespace std;

int main()

;int *a[4]; //指標陣列

int (*b)[4]; //陣列指標

b=&c;

//將陣列c中元素賦給陣列a

for(int i=0;i<4;i++)

//輸出看下結果

cout<

注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。

本文標題: 簡單分析c語言中指標陣列與陣列指標的區別

本文位址:

C語言中指標陣列與陣列指標

1 指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。2 陣列指標的實質是乙個指標,這個指標指向的是乙個陣列。1 int p 5 int p 5 int p 5 2 一般規律 int p p是乙個指標 int p 5 p是乙個陣列 3 如果核心和 結合,表示核心是指標 如果核心和 結合,...

C語言中指標和陣列

首先,明確乙個概念,指標是什麼,一旦提到這個老生常談且富有爭議性的話題,那真是1000個人有1000種看法。在國內的很多教材中,給出的定義一般就是 指標就是位址 從初步理解指標的角度來說,這種說法是最容易理解的,但是這種說法明顯有它的缺陷所在。指標就是位址 這種說法相當於 指標 字面值位址 或者說乙...

C語言中指標與陣列注意地方

一開始我以為兩個spi data out是沒有區別的。都是指標,乙個是常量,乙個是變數而已。沒有太在意。如果有人單看spi data out 0 這個有問題的話我覺得你c語言跟我一樣差。相對於這兩個指標而言這個陣列操作沒有問題。但問題出在哪呢?就是那一長串的字串。把這些一結合就產生了各種問題 程式跑...