megaeyes911 发表于 2011-2-16 11:37:52

小甲鱼 发表于 2011-2-16 17:47:11

一步一步来,*(*(pt+i)+j )这样我们定位的是 i 行 j 列的元素,对吧?

那么*(pt+i)+j 想当然就是 i 行 j 列的地址了。

那么 pt + i 是什么?是 i 行的地址,那么我再加 j 那就是 ( i + j ) 行的地址啦~

呵呵,没了~

仰望天上的光 发表于 2011-2-16 19:28:13

还可以这么看:
若:typedef int vec;
则:
int test={1,2,3,4,5,6,7,8,9,0,9,10};
int (*pt)=test;
等价于
vec test={1,2,3,4,5,6,7,8,9,0,9,10};
vec* pt = test;
进一步,
(pt+i)+j等价于pt+(i+j)
*(pt+i)+j 等价于pt+j
如果对上述描述还是感觉比较抽象,不妨把类型vec当成类型int来看

megaeyes911 发表于 2011-2-16 20:53:27

megaeyes911 发表于 2011-2-16 20:54:26

谋事在人 发表于 2011-2-26 09:55:14

我勒个去,俺是零基础,各种看不懂,但还是支持下。

追梦1航海 发表于 2014-3-14 22:11:14

总结一下
注意pt指向整个数组的首地址,而pt是指向数组第一行的首地址
printf("%x\n",pt);
printf("%x\n",(*pt));
printf("%x\n",pt);
printf("%x\n",(*pt));
printf("%x\n",test);
12ff50
1
12ff5c
2
12ff50
页: [1]
查看完整版本: 讨论:到底有什么区别?