C中一个小问题
这段代码有多处(???)我不明白,请高手指点..
#include<iostream>
using namespace std;
int main()
{
static int a[2]={1,2};
int p1=5,p2=6,*page1,*page2;
int Test[2][3]={{1,2,3},{4,5,6}};
int Test2[3]={1,2,3};
page1=&p1;
page2=&p2;
int (*A)[3],(*B)[3]; //这句怎么理解?
A=&Test[1];
B=&Test2;
cout<<*page1<<endl;
cout<<(*A)[0]<<(*A)[1]<<(*A)[2]<<endl;
cout<<(*B)[3]<<endl; //为什么结果是1呢?
return 0;
}
[解决办法]
#include <iostream>using namespace std;int main(){ static int a[2] = { 1, 2 }; int p1 = 5, p2 = 6, *page1, *page2; // page1, page2没有初始化,即指向不明 int Test[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };// 两种解释:// 1. Test是2维array, array元素为int, 第一维size为2, 第二维size为3;// 2. Test是个array, array大小为2, 元素类型为array, 元素array大小为3, 其中元素类型为int (个人觉得这种递归解释比较好理解后面的问题) int Test2[3] = { 1, 2, 3 }; // Test2为array, 大小为3, 元素类型int page1 = &p1; // page1指向p1 page2 = &p2; // page2指向p2 int (*A)[3], (*B)[3]; // A为一指针, 其指向一array, 该array大小为3, array元素类型int; B亦然 A = &Test[1]; // A指向Test第二个元素, 参看上面的解释2 B = &Test2; // B指向Test2 cout << *page1 << endl; // 输出page1指向的变量的值, 即输出p1的置 cout < <(*A)[0] < <(*A)[1] < <(*A)[2] < <endl; // (*A)得array, []取array中的元素 cout < <(*B)[3] < <endl; // 同上 return 0;}
[解决办法]
int (*A)[3],(*B)[3]; //这句怎么理解?
指向数组的指针,数组长度为3
cout < <(*B)[3] < <endl; //为什么结果是1呢?
=======================
你都越界了,你的机器上市1,别人的可不一定是
(*B)[2]是3,相当于B[0][2]
你就记住,B是一个指针,他指向数组第一个元素的地址