新手求教关于c++数组指针的问题

short stachs[3] = { 3,2,1 };
short (*pas)[3] = &stachs;
cout << "\t\t\t" << "pas is " << pas << endl;
cout << "&stachs[0] is " << &stachs[0] << "\t" << "pas[0] is " << pas[0] << endl;
cout << "&stachs[1] is " << &stachs[1] << "\t" << "pas[1] is " << pas[1] << endl;

在这里pas[0]、pas[1]等是不是都没有意义呢?
pas[0]、pas[1]、pas[2]之间相差6个字节又是什么意思呢?

是这样,(*pas)[3]表示一个三列的数组,有多少行是任意的;而pas是这个数组的指针;
(*pas)[3]=&stachs表示这个指针数组和stach数组对应了,相当于用pas[0]就等于用stachs,所以pas[0]就是stachs的首地址。比如你打:stachs[1],就相当于打:pas[0][1]。也就说stachs[i]=pas[0][i],对0<=i<=2都对。
但是pas[1]是合法的,它表示pas这个任意行三列数组的第二行的首地址。
容易知道pas[1]的值是pas[0]+3*sizeof(short)
不知道这样说楼主能看懂吗?
温馨提示:答案为网友推荐,仅供参考
相似回答