|
|
1鱼币
本帖最后由 kalong1272002 于 2012-4-18 05:03 编辑
- #include<stdio.h>
- main(){
- int (*ptr)[3];
- int i , j;
-
- int ax[3][3] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
- ptr =ax;
- for(i=0;i<3;i++)
- {
- for(j=0;j<3;j++)
- {
-
- printf("%2d ",*(*(ptr+i)+j);
- }
- printf("\n");
- }
- system("PAUSE");
- }
复制代码
根據小甲魚所說*(*(ptr+i)+j)) 是讀取的方法
這是我第一個不明白的地方
*(ptr+i) 當我嘗試這樣打的時侯 "*" 為什麼不是取值的作用 而是把ptr+i的地址print了
我要打**(ptr+i)才能print數值, 為什麼呢?? 不是*(ptr+i) 是取值嗎, 還是2D數組有別的看法
是否與(*ptr) 有關呢?
然後 我第二個不明白的地方是
*(ptr+i)+j
經過一晚的思量 得出以下結果 不知道是否正確 請高手指點,
//由於一開始ptr 指住&ax[0]
//然後*(ptr+0)+j 把ptr+ 0 = &ax[0]+0 然後ax[0] + 0 ...+1...+2(把內存位置推過12byte)即是ax[0][0],ax[0][1],ax[0][2]
//然後*(ptr+1)+j 把ptr + 1 = &ax[0]+1 然後ax[1] + 0 ...+1...+2(把內存位置推過12byte)即是ax[1][0],ax[1][1],ax[1][2]
//然後*(ptr+2)+j 把ptr + 2= &ax[1]+2 然後ax[2] + 0 ...+1...+2(把內存位置推過12byte)即是ax[1][0],ax[2][1],ax[2][2]
想知道這樣理解正確嗎???
但都是不明白為什麼要(*ptr)[3] 的做法
另外, *(ptr+i)+j 為什麼+j 能使 a[0][j] <<中的j 推動呢??
是這樣嗎??
|
最佳答案
查看完整内容
楼主,指针和数组的问题确实很纠结呢!
你要知道如果我定义一个指针 int *p;可以用p指向一个一位数组,例如: int a[40]; p = a;
但是,p却不可以指向一个二维数组,但是二维数组可以看成是多个一位数组的组合。例如:int b[3][40],可以看成3个一位数组,而且每个一位数组有40个元素。
所以,相对的,我们定义指针,不能够直接用 int *p; 但是我们可以用 int (*p)[40],这样表示p是一个指针,指向一个包含40个int值。
但是 ...
|