作者LPH66 ((short)(-15074))
看板Programming
标题Re: [问题] 用指标传递2维阵列
时间Sat Oct 3 08:05:24 2009
※ 引述《mVictory (时间)》之铭言:
: int arr[][3] = {1,2,3,
: 4,5,6,
: 7,8,9};
: void func(int **aptr){
: printf("*aptr=%u",*aptr);
: }
: main(void){
: func((int **)arr);
: }
: 上述程式透过 type cast 将2维阵列arr 转成 2阶指标传给 void func(int **),
: 执行结果 *aptr = 1。
: 我的问题是:
: 2阶指标 取值一次(*aptr)应该是存放 address,
: 这边为何就已经是 value ?
那不是「已经是 value」,而是被(错误地)当成 address 的 value。
二阶指标是表示你这个指标指向的东西是个指标,
所以这里 *aptr 其实形态仍然是 int *,只不过是指标值为 1 而已。
你可以试着做 (*aptr)++; 之後去查看其值,会发现值变成 5 而非 2,
这正是它仍旧是个指标的证据。
---
另外,传二维阵列不是这样传的。
int ** 形式的二维阵列和 int [][3] 形式的二维阵列两个的结构根本不一样,
不可能会有简单的方法在两者之间互转,
虽然它们都能用 arr[2][1] 的方式去存取,但做的事情是不一样的。
--
**** 说:
不要期望一个精神力差不多已经见底的人阿Orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.28.92
※ 编辑: LPH66 来自: 140.112.28.92 (10/03 08:06)
1F:推 mVictory:原程式改了++(*aptr)後.我大概了解了THX! 218.160.109.30 10/03 11:01