读书人

关于二重指针的有关问题

发布时间: 2013-03-01 18:33:02 作者: rapoo

关于二重指针的问题
int main()
{
int tab[8]={3,4,2,6,7,9};
int tab2[3][4]={3,4,2,6,7,9};

cout<<*(tab+3)<<endl;

cout<<tab[5]<<endl;

cout<<*(&tab[6])<<endl;

cout<<*(*(tab2+1))<<endl;

cout<<*(&tab2[0][0]+1)<<endl;

cout<<*(tab2+1)<<endl;

cout<<&tab2[1][0]<<endl;
}

result:
6
9
0
7
4
0x7fff5fbff7e0
0x7fff5fbff7e0


关于指针的小练习,我不太明白二维数组情况下的指针是怎么处理的,第一个粗体的二重指针我完全看不懂。。。第二个粗体tab2+1指的是不是二维数组的第二行?如果是的话,输出结果为什么不是一行共4个数??
求解释。。谢谢
[解决办法]

引用:
第二个粗体tab2+1指的是不是二维数组的第二行?


是的,就是从7开始的那一行,你如果这样初始化会比较好阅读


int tab2[3][4]={ {3,4,2,6},
{7,9} }; //请尽量让自己的代码容易阅读




引用:
输出结果为什么不是一行共4个数

因为他不是一个OBJECT,他表示的只是一个位置

你可以这样想像

tab2[3][4]

tab2[0] --> 3, 4, 2, 6
tabs[1] --> 7, 9, ?, ?
tabs[2] --> ?, ?, ?, ?
tabs[3] --> ?, ?, ?, ?

那个-->只是指向第一个位置而已

这是我的理解,有错欢迎指正

至于第一个则代表
cout<<*(*(tab2+1))<<endl;

*(tab2+1) == 取出tab2[1]的位置,也就是7所在的位置
*(*(tab2+1)) == dereference这个位置的资料

读书人网 >C++

热点推荐