#include<iostream.h>
void main()
{
char *p[]={"comm","digi","auto","tele","elec"};
char **q[]={p+2,p, p+4,p+1,p+3};
cout<<q[3][1]<<endl;
cout<<*q[1]<<endl;
cout<<**(q+4)<<endl;
cout<<*(*(q+1)+1)<<endl;
cout<<*(q[3]+3)<<endl;
}
结果是:
auto
comm
tele
digi
elec
不知道q[3][1]是什么意思,为什么就指代auto了;剩下的也一样都不懂,请详细解释下,谢谢!!!
首先,将程序的地址打印出来对比一下。数组和指针之间的对应关系,在程序中已经标出。
其次,内存模型如下图
为什么q[3][1]指向auto呢?
q[3][1]等价于 *(*(q+3)+1), q[3] = *(q+3)表示指向q[3]的内容,而指向q[3]的内容是p[1],在再&p[1]的基础上加1,就相当于得到了 &p[2],故指向了auto。
注意:q+3,应为q是指针类型,在32为机器上占4个字节,所以q+3,相当于在q的实际地址上加了12(3x4)。