1樓:育知同創教育
int a[3][4]這個bai無需多說,就du是乙個二zhi維陣列。
int (*p)[4]就相當於daoint p[4],它就是乙個二維陣列的指標,可以
專指向乙個第屬二維度為4的二維陣列。而a就是這樣的陣列,因而下面是合法的。
p=a;
int *p[3]是指標陣列。說白了,就是定義了三個指標,分別為p[0],p[1],p[2]。可以將他們單獨拿來使用。
int a1,a2,a3;
p[0]=&a1;
p[1]=&a2;
p[2]=&a3;
陣列指標和指標陣列的區別
2樓:匿名使用者
陣列指標(也稱行指標)
定義 int (*p)[n];
()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。
如要將二維陣列賦給一指標,應這樣賦值:
int a[3][4];
int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。
p=a; //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]
p++; //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]
所以陣列指標也稱指向一維陣列的指標,亦稱行指標。
指標陣列
定義 int *p[n];
優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,這
樣賦值是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數地
址。但可以這樣 *p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。
如要將二維陣列賦給一指標陣列:
int *p[3];
int a[3][4];
p++; //該語句表示p陣列指向下乙個陣列元素。注:此陣列每乙個元素都是乙個指標
for(i=0;i<3;i++)
p[i]=a[i]
這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]
所以要分別賦值。
這樣兩者的區別就豁然開朗了,陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它占有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。
還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。
比如要表示陣列中i行j列乙個元素:
*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]
優先順序:()>>*
3樓:千鋒教育
指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標。
陣列指標:a pointer to an array,即指向陣列的指標。
還要注意的是用法的區別,下面舉例說明。
int* a[4] 指標陣列
表示:陣列a中的元素都為int型指標
元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於*int (*a)[4] 陣列指標
表示:指向陣列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<<*a[1]< }注意:定義了陣列指標,該指標指向這個陣列的首位址,必須給指標指定乙個位址,容易犯的錯得就是,不給b位址,直接用(*b)[i]=c[i]給陣列b中元素賦值,這時陣列指標不知道指向**,除錯時可能沒錯,但執行時肯定出現問題,使用指標時要注意這個問題。但為什麼a就不用給他位址呢,a的元素是指標,實際上for迴圈內已經給陣列a中元素指定位址了。 但若在for迴圈內寫*a[i]=c[i],這同樣會出問題。總之一句話,定義了指標一定要知道指標指向**,不然要悲劇。 4樓:e時代幽默網 陣列指標,就是乙個指向陣列首元素的指標,或者說是指向乙個陣列起始記憶體位址的指標。 指標陣列,就是乙個陣列中的所有元素型別均為指標,也就是說是乙個專門用來存放一堆指標的陣列。 c語言中的指標陣列和陣列指標的區別 5樓:黑丶雨 指標陣列:陣列裡的每乙個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標; 可參考:http://baike. 陣列指標:指向乙個陣列的指標,如 arr[10] 是乙個陣列, 讓乙個指標指向這個陣列 p = arr; 訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值; 可參考:http://baike. 6樓:育知同創教育 int (*p)[4]; // 定義乙個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。 int *p[4]; // 定義乙個指標陣列,陣列中每個元素是乙個指標,指標指向**就要根據程式來定了。 判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。 int (*p)[4]; // 由於( )的優先順序高,說明p是乙個指標,指向乙個一維陣列的指標 int *p[4]; // 由於[ ]的優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列 c 語言指標的指標和二維陣列的區別? 7樓:文帝寶寶 指標的指標和二維陣列完全倆東西,二維陣列是 一維陣列的一維陣列,元素是陣列,所以可以隱式轉化為int (*)[3],跟int **兩回事,擴充套件到更多維或其它型別也是成立的,只能隱式轉化為第一維的元素的指標 補充說明下隱式轉化為指標,簡單說就是這樣(t是任意型別) 設有乙個陣列t a[10]; a的型別是「t [10]」,在做大多數運算的時候,都先隱式轉化為「t *」型別,即t的指標 對於多維陣列,可以看做是乙個一維陣列,陣列的元素型別就是第二維開始的陣列型別,比如: t a[10][20][30]; 是乙個有10個型別為「t [20][30]」元素的陣列,用**解釋更清晰: typedef t u[20][30]; u a[10]; 跟上面的定義等價,所以a只能隱式轉化為「u *」,「u *」後也就是「t (*)[20][30]」這個型別了,跟多級指標沒關係,因此,多維陣列不存在到多級指標的轉化規則,強轉只會導致問題 8樓:育知同創教育 二維陣列由若干個一維陣列組成在c語言中定義的二維陣列實際上是乙個一維陣列,這個一維陣列的每乙個成員又是乙個一維陣列。 當變數作為函式的引數時,函式內修改的是形參,實參不變化;(swap(int a, int b)) 當指標作為函式的引數時,函式內:若修改指標變數,實參指標指向變數不變。若修改指標指向,實參指標指向的變數變化。(swap(int *a, int *b)) 指標陣列 陣列裡的每乙個元素都是指標如 p 10 裡面的 p 0 到 p 9 都是指標 可參考 http baike.陣列指標 指向乙個陣列的指標,如 arr 10 是乙個陣列,讓乙個指標指向這個陣列 p arr 訪問時通過 p n 或 p n 訪問元素值,n為元素索引值 可參考 http baik... 第乙個和第二個陣列a 2 按指標說就是指向a 1 也就是30的記憶體下乙個位置,兩種程式排列不一樣,第二個下乙個應該是i的位置,第乙個不一定,可能是堆裡面的隨機數。恩。打個比方說有一天你去賓館訂了個房間。然後再牆壁上鑿了個洞看隔壁住著誰。後來又有一天你又去訂了乙個房間,然後又在牆壁上鑿了個洞看隔壁住... 1 陣列可以申請在棧區和資料區 指標可以指向任意型別的記憶體塊 2 sizeof作用於陣列時,得到的是陣列所佔的記憶體大小 作用於指標時,得到的都是4個位元組的大小 3 陣列名表示陣列首位址,值不可以改變,如不可以將 作用於陣列名上 普通指標的值可以改變,如可將 作用於指標上 4 用字串初始化字元陣...c語言中的指標陣列和陣列指標的區別
c語言陣列越界,C語言陣列(指標)越界訪問
ios中陣列和指標的區別,陣列和指標的區別