三条规律:
(一)数组名相当于指向数组第一个元素的指针
(二)&E相当于把E的管辖范围上升了一个级别
(三)*E相当于把E的管辖范围下降了一个级别
注意要点:
(一)&和*的优先级要高于+和-
(二)指向数组的指针的输出为这个数组的起始地址
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }; 6 cout << "a=" << a << endl; 7 cout << "&a[0]=" << &a[0] << endl << endl; 8 9 cout << "a+1=" << a + 1 << endl; 10 cout << "&a[0]+1=" << &a[0] + 1 << endl << endl; 11 12 cout << "a[1]=" << a[1] << endl; 13 cout << "&a[1]=" << &a[1] << endl; 14 cout << "*(a+1)=" << *(a + 1) << endl << endl; 15 16 cout << "&a[0][0]+1=" << &a[0][0] + 1 << endl; 17 cout << "*a+1=" << *a + 1 << endl << endl; 18 19 cout << "&a=" << &a << endl; 20 cout << "&a+1=" << &a + 1 << endl; 21 return 0; 22 }
输出结果:(序号不在输出之列,只是为了方便分析)
1. a=009EFC18
2. &a[0]=009EFC18
3. a+1=009EFC28
4. &a[0]+1=009EFC28
5. a[1]=009EFC28
6. &a[1]=009EFC28
7. *(a+1)=009EFC28
8. &a[0][0]+1=009EFC1C
9. *a+1=009EFC1C
10.&a=009EFC18
11.&a+1=009EFC48
结果分析:
1.a指向一维数组a[0]
2.a[0]指向一维数组a[0]的第一个元素,用&进行升级指向一维数组a[0]
3.a指向一维数组a[0],因为一维数组a[0]的管辖范围为a[0][0]、a[0][1]、a[0][2]、a[0][3],+1后指向一维数组a[1]
4.&a[0]指向一维数组a[0],+1后指向一维数组a[1]
5.a[1]指向一维数组a[1]的第一个元素a[1][0]
6.a[1]用&升级后指向数组a[1]
7.a+1指向数组a[1],用*降级后后指向一维数组的第一个元素a[1][0]
8.&a[0][0]指向a[0][0],+1后指向a[0][1]
9.*a指向一维数组a[0]的第一个元素a[0][0],+1后指向第二个元素a[0][1]
10.&a指向二维数组a[3][4],输出时输出它的起始地址
11.&a的管辖范围为a[0][0]……a[2][3],进行+1后指向二维数组a[3][4]之后的地址
时间: 2024-11-03 21:21:12