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 你的...