二維指標問題,普通指標與二維指標

2025-02-05 15:35:11 字數 3506 閱讀 9130

1樓:網友

我是這樣理解的,首先你要明白:

int **p2;

int *p1;

p2 = p1;

這樣才符合規則,我想你是這兒不明白吧。

在你的程式中 :

a[中的a是首位址,可以認為是個常量值,而二維指標所要賦的值確是指標變數的位址。

其次你要理解,資料在記憶體中是按順序排列的,不存在二維,只是人們為了方便而那樣想的,若要製造二維概念,就必須學會用指標跳躍訪問,一次性跳過好幾個內容,到達下乙個位址,就可以看做是到二維中的第二個位址了。

int a[2][2]=;

int (*p)[2];

p = a;

p此時指向的是a[0][0],p+1指向的就是a[1][0];因為p在定義的時候宣告過,指標加一,相當與移動兩個。

你的程式如下:

#include

void main()

int i,j;

int (*p)[2]; 此處是(*p)[2]不是*p[2],後者是指標陣列*/

int a[2][2]=;

for(i=0;i<2;i++)

for(j=0;j<2;j++)

printf("%d ",a[i][j]);

p=a;for(i=0;i<2;i++)

for(j=0;j<2;j++)

printf("%d ",p[i][j]);

2樓:網友

指標和陣列不是對等的,指標p不允許使用p[i][j],這樣的表示,只允許p[i],因為指標無法知道第一維的大小。

可以這樣用:

void main();

for(i=0;i<2;i++)

for(j=0;j<2;j++)

printf("%d ",a[i][j]);正常訪問。

p=&(a[0][0]);

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

printf("%d ",p[i]);

普通指標與二維指標

3樓:折心灬小軒

指標變數,是計算機用來執行間接引用的一種變數。

我們知道,每乙個變數都有乙個值和位址,這個值儲存在這個指標變數的位址上,普通指標變數的值就是乙個位址,對它進行解除引用操作會得到該位址儲存的值。

那麼二級指標呢?二級指標是乙個指向指標變數的指標,他的值是乙個指標變數的位址,對二級指標進行解除引用操作得到的是乙個指標變數的位址,如果再次對他進行解除引用,那麼得到的就是該指標變數指向的位址的值表示的記憶體位址的值。

例如:int *p,**pp;

pp和p和等價的。

pp和*p是等價的。

二級指標常用於指標作為引數傳遞給函式或動態的分配二維陣列。

不明白可以追問。

4樓:網友

二維指標是 int **p;

它是指向指標的指標。

二維陣列和指標的乙個疑問。

5樓:尋覓

a是乙個二級指標,也成為行指標。

它是乙個常量指標。

對a操作就使指標指向其他行。比如a+1就指向了第一行。

a是一級指標,(a+1)是第一行首個元素的位址,相當於於a[1]。

a是內容。*(a+1)+1)是第一行第乙個元素,相當於a[1][1]。

這裡a與*a相同,可以類比為乙個函式int max()和乙個函式指標int (*p)()

寫成p=max,*p=max都是一樣的。

比如max的位址是1000,&max也是1000.

是因為它是乙個常量指標。

這裡*a理解為對a的首位址進行取值也是可以的。

6樓:網友

*a 指的是位址為a的地方存的東西。

7樓:

*在定義和運算中的含義是不同的。

關於二維指標

8樓:手機使用者

必須是行指標或二級指標才可以,因為在c程式設計系統中,對於二維陣列會看成陣列元素為一維陣列的一維陣列,即對於二維陣列aa[2][3],系統會看成aa[0]和aa[1],而aa[0]和aa[1]中分別包含三個元素,這就是系統對於二維陣列的處理。所以你直接把二維陣列名賦給乙個普通的指標變數,這個指標是指向元素aa[0]的,但實際上呢,aa[0]不是乙個具體的元素,而是元素aa[0][0]的位址,所以只有把陣列名賦給二級指標它才指向乙個具體的元素。二維陣列名不能說是二級指標,不能按指標的思路來理解二維陣列,要按一維陣列的思路來理解,即按照系統的理解方式會簡單些。

9樓:網友

什麼叫「二維指標存放乙個一維指標的位址」??

什麼書上有這個概念?? 一直沒碰上 哪天也叫我遇上一次?? 恩?? 不想看!

指向陣列的指標 可以說是多維的。

但是指向指標的指標(的指標。。。一直下去 和也多啊)怎麼區別嘛。

不廢話了! 解決問題是關鍵!!!

int a[4][4];

int**p = a; 或者 int**p = &a[0]; 都是錯誤 什麼叫二維指標。

指向陣列的指標。

int a[4][4];

int (*p)[4] = a; 或者 int (*p)[4] = &a[0]; 可以像二維陣列一樣訪問。

int a[4][4];

int *p = &a[0][0]; 可以像一維陣列一樣訪問。

10樓:網友

你是怎麼修改一維指標的。

二維陣列和指標

11樓:網友

1全部答案選a

二維陣列在記憶體中是按行順序存放的,先存放arr[0]行,然後再存放arr[1]行,字串常量在記憶體中存放的時候會自動加\0

arr[0]行先存放 y o u 三個字元,然後arr[0][3]存放&

即arr[0]存放 y o u & 四個字元arr[1]行存放 m e \0

所以最終輸出的時候,從arr[0]開始輸出字串,遇到\0結束,即輸出的you&me

12樓:

答案是a

字串字面量「you」其實是字元陣列。

ar[0][3]=='\0',被重新賦值後為『&』

printf()函式以%s字串形式列印ar[0]指向的值(即ar[0][0])直到遇到『\0』

故列印you&me

二維陣列指標

13樓:吟遊詩人

0≤i≤j<4說明陣列是a[3][4],三行四列。&a[0][0]+4*i+j 就是從二維陣列的首位址開始偏移,i表示行數,+4*i就是偏移到哪行;j表示列數,+j就是偏移到哪列。

同理a[0]也是該陣列的首位址。

14樓:網友

按4的舉例。

a[0][0]+4*i+j = a[0][j]+4*i

4*i就是第i行之前的元素個數。

C語言指標陣列與二維陣列行指標小問題

指標陣列 copy 該陣列中存放的全部都是指標,例如 原例子中的char name,這個是一個標準透了的一維陣列,就像是陣列 int a 4 a 1 2 a 2 3 不同的是陣列name存放的是指標,陣列a存放的是數字 name 1 name 2 表示的是把name 2 的指標賦值給name 1 就...

c語言二維陣列與指標運算,C語言二維陣列與指標運算

在 p 4 中p是指向一個有4 個int元素的一維陣列的首地址,int p 4 a就相當於int p 4 p a 兩個語句,所以 p i 指向i行地址,p i c 指向i行c列的地址即a i c int p 4 a 表示指向一維陣列 4列 的指標,然後a 0 地址給了p,p i就表示a i 的地址....

關於二維陣列和指標

p 10的值並不是未定義,正像你說的那樣把2維陣列看成一維陣列,首先將p指向這個一維陣列的首地址,而這個一維陣列的長度是20,也就是說當你p 10的時候指向的是b這個字元上,當你執行的時候會顯示beijing 陣列實際儲存時是按照線形連續儲存的。所謂一維陣列,二維陣列,三維陣列只是為了方便理解和使用...