香港顶级一比一手表:关于二维数组指针的问题?

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 18:41:48
关于二维数组指针的问题?

有如下程序:
main()
{int a[2][5]={{1,2,3,4,5},{6,7,8,9,10}};
printf ("%d",*(a+1));
}
这样为什么屏幕打出的数不是6而是a[2][0]的地址?我已经加了*号了啊,如果我不加*号,直接是a+1得到的答案还是和*(a+1)是一样的,都是a[2][0]的地址。把程序改成*(*(a+1))后答案却是对的。为什么还要多加一个*号呢?请高手指教。感激不尽!

*有两种用途,一是取地址,二是取值!
这里a指向的是数组a的第一行元素的行地址(不是第一行第一个元素的地址,而是整行的地址),a+1就是将行地址移动一个单位,也就是到了第二个行地址,加一个括号并在前面加*就变成第二行第一个元素的地址,再加一个*才能变成元素的值!

*(a+1)实际上指向的是数组里面第一行的第二个元素,那么而加上*(*(a+1))则是指向了第二行的第一个元素

呵呵,等楼主学了编译原理后,就能彻底弄明白了。