二维数组的指针指向记录

Posted 宵夜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组的指针指向记录相关的知识,希望对你有一定的参考价值。

三条规律:

(一)数组名相当于指向数组第一个元素的指针

(二)&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]之后的地址

以上是关于二维数组的指针指向记录的主要内容,如果未能解决你的问题,请参考以下文章

如何利用memcpy将二维指针复制给一维指针?

指向二维数组的指针

二维数组名不能赋值给二级指针- -

C语言指针指向一维数组与二维数组?

C语言指向二维数组的指针

C语言 指向二维数组的指针