问一个比较呆的问题,今天看到了这样一个程序,运行结果是9,我就糊涂了
(pa+1)[1]是什么啊
为什么(pa+1)[0]是5呢
那个方括号里的数字指什么呢
我真是彻底晕了
求指教~
#include
void main()
{
static int a[3][4]={1,2,3,4,5,6,7,8,9,10},(*pa)[4]=a;
cout<<*(pa+1)[1]<<endl;
}
问一个比较呆的问题,今天看到了这样一个程序,运行结果是9,我就糊涂了
(pa+1)[1]是什么啊
为什么(pa+1)[0]是5呢
那个方括号里的数字指什么呢
我真是彻底晕了
求指教~
#include
void main()
{
static int a[3][4]={1,2,3,4,5,6,7,8,9,10},(*pa)[4]=a;
cout<<*(pa+1)[1]<<endl;
}
#include
int main()
{
int a[3][4] = {
1,2,3,4,
5,6,7,8,
9,10
};
int (*b)[4] = a ;
printf("%d %d\n",*(b+1)[1],*(b)[1]);
//测试结果: 9 5
printf("%d %d\n",(*(b+1))[1],(*(b))[1]);
//测试结果: 6 2
return 0;
}
看见了吧,相信 你能看明白了。
首先运算符的先后顺序 *b[1] = * (b[1])
而之前 (*b)[4] = a
说明 把 a的首地址 也就是 &(a[0][0]) 赋值给了 (*b)[4] 这个数组 。
(*b)[4] 这个数组 是个 指针数组。 赋值结束后
*b 代表了第一行第一列的值,你可以打出来看看( printf("%d\n",*b[0] ), 而b 就代表了第一行第一列 的 首地址 ,所以 b = a.
所以 b[1] = a[1]
so
*(b+1)[1] = * ( (b+1)[1]) = * (b+1 + 1) = * a[2] = a[2][0] ;
over!