C語言菜鳥請教個2維陣列指標的問題

時間 2021-08-30 11:01:32

1樓:匿名使用者

a[1]就是*(a+1),一模一樣。就是取位址運算子,解析之後就是*()的形式。

a[1]就是&a[1][0]

所以*(a+1)就是&a[1][0],也就是位址你不要老想著什麼取位址取值,只要按照*的運算規律和陣列的基本概念去理解就好了

對於乙個二維陣列,a表示a[0]的首位址即&a[0],而a[0](把a[0]看作乙個一維陣列)表示a[0][0]的首位址即&a[0][0]。一句話,陣列名代表陣列第乙個元素的位址。

再好好想想吧

c語言二維陣列用指標表示的問題

2樓:匿名使用者

#include

void main()

;int (*p)[4];

p=a;

printf("%d",*(p)[3]);

}首先你沒有理解int (*p)[4];

他的意思就是含有4個指標的陣列 由於int a[3][4]只有3行,所以*(p)[3]這個地方就越界了

如果*(p)[2]位址中的值就是17 *(p)[1] 就是9 ,*(p)[0]就是1

如果你要列印7 *((p)[0]+3)

3樓:匿名使用者

因為p[3]沒有指向a[0][3],你加條語言

printf("%x\t%x\n", p[3], &(a[0][3]));

就知道了。

4樓:匿名使用者

printf("%d",(*p)[3]);

5樓:貴藹堂馨蓉

你說要放到另外乙個陣列b中,但是沒看到你定義新的陣列,所以我就按我自己的理解做了。

#include

#define

rows

3#define

cols

4double

copy_ptr(double

*tar);//乙個變數就夠了

//rows和cols本來就是define的,全域性intmain(void),,

,};double

*p=source[0];

printf("taget[%d][%d]=",rows,cols);

copy_ptr(p);

printf("\n");

while(1)

{}return0;}

double

copy_ptr(double

*tar)

}//直接輸出了……

return0;}

有問題歡迎**……

6樓:匿名使用者

#include

int main()

;int (*p)[4];

p=a;

printf("%d",*(*p+2));

return 0;

}//你沒有理

解多維陣列a的意思

c語言的問題,指標陣列

7樓:匿名使用者

改變不了,字串常量是改不了的,你可以試試char *p = "aaaaa";

p[1] = b;這樣是改不了的

只能定義二維陣列才可以改

char p[3][100] = ; 這樣才可以改,不要問為什麼,字串常量就是不能改

8樓:千鋒教育

直接讓指標指向另乙個字串即可

p[0]="aaaa";

9樓:橙

這樣定義指標指向的字串是無法修改的。

關於c語言二維陣列陣列名與指標的問題

10樓:匿名使用者

先說些這個2維陣列:int arr[3][4]

可以理解為乙個3行四列的矩陣,那麼第一維arr[0],arr[1],arr[2]中存的分別是對應行的位址,也就是說arr[0]存的是乙個「大小為4的整形陣列位址」

這樣的話就好理解了,arr存的位址值其實與arr[0]本質上是相同的。都是這個連續空間的開始位址。

第乙個問題,arr是個位址變數,因此它本身是個位址,而它存的其實也是個位址。

第二個問題,&arr也是首位址,不過叫「2維陣列的首位址」,卻別的話就是它有個寬度,舉個例子:「&arr+1」其實相當於「&arr[sizeof(a)+1]」這裡arr大小為7,那麼&arr+1就是從二維陣列首位址開始後的第8個整形變數空間的位址。當然從位址值的角度看它們是沒有什麼卻別的,區別在於「指標寬度」

不知道你明白沒?

11樓:匿名使用者

int (*p)[6] = arr;//定義乙個陣列指標指向二維陣列的首位址arr

這行奇葩的**就不做點評了,在如果在c++的編譯器裡編譯器絕對打臉。

陣列名代表的指標其實是降了一級的指標,比如你寫int p[10],陣列名p並不是指向十個int元素,而是指向第乙個int元素,如果希望得到int [10]的指標應該使用&p;int arr[3][4]也是如此,arr並不是指向arr[3][4],而是指向第乙個int [4]陣列,要指向整個int [3][4]使用&arr。

他們的位址都是一樣的,都是指向第乙個元素的位址,但是他們的指標指向的物件長度是不一樣的。

c語言中二維字元陣列和指標的問題

12樓:匿名使用者

1.fun函式定義中char *s[100] 和 char(*s)[100]區別在**?

char *s[100]; 這個叫指標陣列,說白了就是本質上講是陣列,只不過陣列的每個元素都是指標

char(*s)[100];這個叫陣列指標,說白了本質上是乙個指標,只不過指標指向的是乙個陣列

2.主函式中,只是定義了 str[10][100] ,為什麼就可以直接 gets(str[i])? str是什麼?

這裡str是乙個二維陣列,所以str[i],只有第一維的話,就相當於上面的陣列指標,本質上是指標

13樓:匿名使用者

char *s[100]表示陣列s[100]是指標型別的,每個陣列元素都相當於乙個指標變數,都可以指向乙個字元型變數;

char(*s)[100]表示s是乙個指標變數,它指向包含100個字元型元素的一維陣列;

str表示乙個字元陣列;這題中,str[i]=str[0],而gets函式表示得輸入字串,輸入沒有限制,直到輸入換行符或者其他的結束標識,輸入才結束;輸入的字串就存放在str[10][100]這個陣列中,str[0]表示將輸入的第乙個字元存在陣列的首位元素中,其他的字元按陣列順序存放。

c語言問題,用指標為乙個二維陣列賦值

14樓:fzy範忠雲

ptr=arr;

其實你這樣賦值也是可以的,是沒有問題的。

因為arr是二維陣列的陣列名,它636f707962616964757a686964616f31333264626539(arr)本身就代表這個二維陣列的第0行的位址。

問題關鍵不是出現在這裡,而是在你程式的while迴圈語句中

你這樣寫是不對的,首先ptr指向的是乙個位址,所以ptr+i也是乙個位址,所以這裡就不能用變址運算子"&"了。第二個問題是,i 從0自加到6,這裡面其實有了7個數,明顯超過了arr陣列的長度,這樣是不對的。這個迴圈還有乙個問題就是,這本身就是乙個不正常的迴圈(自己想想為什麼)

下面是我幫你改改的**,希望對你會有幫助。

#include

void main()

15樓:傻帽天才

順著你的想法 我給來你改了一下自 對於樓上bai寫的**我說一du下 他那裡的ptr = array[0] ;我說這個zhi希望能增加你對指dao針的理解。

double arr[2][3];

double( *ptr)[3];

int i=0;

ptr=arr;

printf("plese enter 2*3 numbers: \n");

16樓:匿名使用者

這個我不太明白,我也是新手,我也遇到過這種情況,我是這樣做內的:

#include

void main()

希望對你有點容幫助

17樓:樹袋熊劉

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

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

scanf("l%f",a[i][j]);

我也是新手,不知道這樣做對不對

求助 C語言二維陣列指標問題,c語言二維陣列用指標表示的問題

1.對於int p a p型別和a是不同的。p是指向乙個指標 指向int型別的量 的指標,a則是指向乙個一維陣列 含2個int元素 的指標。想要建立相同型別的指標應該用int p 2 才行 3.感覺p跟a就同級吧但型別不同 所以其實int p a 兩側的指標的型別是不相同的,只是a的值賦給p而已 假...

關於C語言二維陣列指標問題

如果是前者的話,每行應該輸出乙個元素才對,如果是後者的話又應該只能輸出每一行的首元素才對呀?正如樓上2位仁兄所言,p 指的是前者 下乙個元素的位址 樓主的疑問似乎是認為,該程式段 每行應該輸出乙個元素才對 這是不對的,語句printf 3d p 是每輪迴圈都要執行的,即按每個數字佔3個int大小列印...

C語言 用指標程式設計 輸入4 5的二維整型陣列,輸出其中最大值 最小值以及它們所在行和列的下標

it孤鶩 沒錯誤,你要效果是什麼 就那上面的例子 0 你想輸出 1行1列嗎 那隻要 後面四個變數加1 就可以了 printf 最大值為 d,行標 d,列標 d n max,xb1 h 1,xb1 l 1 printf 最小值為 d,行標 d,列標 d n min,xb0 h 1,xb0 l 1 你的...