[c/cpp]:指针的区别:【 int *px[3] 和 int (*pa)[3] 】
一、程序代码
1 #include <iostream>
2
3
4 int msg()
5 {
6 int x[3] = {1,2,3};
7
8 int xx[4][3] = {
9 {1,2,3},
10 {4,5,6},
11 {7,8,9},
12 {10,11,12}
13 };
14
15
16 // 'px' is an array with three int pointers
17 int* px[3];
18 px[0] = &x[0];
19 px[1] = &x[1];
20 px[2] = &x[2];
21 //std::cout << "\t[p2x][2]_value \t:=\t" << *px[2] << std::endl;
22 //std::cout << "\t[p2x][2]_address\t:=\t" << px[2] << std::endl;
23
24
25 // 'pa' points to an array with three int elements;
26 int (*pa)[3];
27 //pa = &x;
28 pa = xx;
29 //std::cout << "\t[p2a]_value \t:=\t" << pa[0][2] << std::endl;
30 //std::cout << "\t[p2a]_address\t:=\t" << &pa[0][2] << std::endl;
31
32
33 // test output: general ouput
34 for (int i=0; i<3; i++) {
35 std::cout << "\n" << "element_general["<< i <<"]" << std::endl;
36 std::cout << "\t[p2x][" << i << "]_value \t:=\t" << *px[i] << std::endl;
37 std::cout << "\t[p2x][" << i << "]_address\t:=\t" << px[i] << std::endl;
38 std::cout << "\t[p2a][0][" << i << "]_value \t:=\t" << pa[0][i] << std::endl;
39 std::cout << "\t[p2a][0][" << i << "]_address\t:=\t" << &pa[0][i] << std::endl;
40 }
41
42 // test ouput2: array output
43 std::cout << "\n\n" << "------------------------" << std::endl;
44 for ( int i=0; i<4; i++) {
45 std::cout << "\nelement_array[" << i << "]" << std::endl;
46 for ( int j=0; j<3; j++) {
47 std::cout << "\tpa[" << i << "][" << j << "]_value \t:=\t" << pa[i][j] << std::endl;
48 std::cout << "\tpa[" << i << "][" << j << "]_address\t:=\t" << &pa[i][j] << std::endl;
49 }
50 }
51
52 // test ouput3: pointer output
53 std::cout << "\n\n" << "------------------------" << std::endl;
54 pa=xx;
55 for ( int i=0; i<4; i++, pa++) {
56 std::cout << "\nelement_pointer[" << i << "]" << std::endl;
57 for ( int j=0; j<3; j++) {
58 std::cout << "\tpa[" << i << "][" << j << "]_value \t:=\t" << pa[0][j] << std::endl;
59 std::cout << "\tpa[" << i << "][" << j << "]_address\t:=\t" << &pa[0][j] << std::endl;
60 }
61
62 }
63
64
65 return 0;
66 }
67
68
69 int main (int argc, char* argv[], char* envp[])
70 {
71 msg();
72
73 return 0;
74 }
二、运行结果
element_general[0]
[p2x][0]_value := 1
[p2x][0]_address := 0x7fff4a706c80
[p2a][0][0]_value := 1
[p2a][0][0]_address := 0x7fff4a706cb0
element_general[1]
[p2x][1]_value := 2
[p2x][1]_address := 0x7fff4a706c84
[p2a][0][1]_value := 2
[p2a][0][1]_address := 0x7fff4a706cb4
element_general[2]
[p2x][2]_value := 3
[p2x][2]_address := 0x7fff4a706c88
[p2a][0][2]_value := 3
[p2a][0][2]_address := 0x7fff4a706cb8
------------------------
element_array[0]
pa[0][0]_value := 1
pa[0][0]_address := 0x7fff4a706cb0
pa[0][1]_value := 2
pa[0][1]_address := 0x7fff4a706cb4
pa[0][2]_value := 3
pa[0][2]_address := 0x7fff4a706cb8
element_array[1]
pa[1][0]_value := 4
pa[1][0]_address := 0x7fff4a706cbc
pa[1][1]_value := 5
pa[1][1]_address := 0x7fff4a706cc0
pa[1][2]_value := 6
pa[1][2]_address := 0x7fff4a706cc4
element_array[2]
pa[2][0]_value := 7
pa[2][0]_address := 0x7fff4a706cc8
pa[2][1]_value := 8
pa[2][1]_address := 0x7fff4a706ccc
pa[2][2]_value := 9
pa[2][2]_address := 0x7fff4a706cd0
element_array[3]
pa[3][0]_value := 10
pa[3][0]_address := 0x7fff4a706cd4
pa[3][1]_value := 11
pa[3][1]_address := 0x7fff4a706cd8
pa[3][2]_value := 12
pa[3][2]_address := 0x7fff4a706cdc
------------------------
element_pointer[0]
pa[0][0]_value := 1
pa[0][0]_address := 0x7fff4a706cb0
pa[0][1]_value := 2
pa[0][1]_address := 0x7fff4a706cb4
pa[0][2]_value := 3
pa[0][2]_address := 0x7fff4a706cb8
element_pointer[1]
pa[1][0]_value := 4
pa[1][0]_address := 0x7fff4a706cbc
pa[1][1]_value := 5
pa[1][1]_address := 0x7fff4a706cc0
pa[1][2]_value := 6
pa[1][2]_address := 0x7fff4a706cc4
element_pointer[2]
pa[2][0]_value := 7
pa[2][0]_address := 0x7fff4a706cc8
pa[2][1]_value := 8
pa[2][1]_address := 0x7fff4a706ccc
pa[2][2]_value := 9
pa[2][2]_address := 0x7fff4a706cd0
element_pointer[3]
pa[3][0]_value := 10
pa[3][0]_address := 0x7fff4a706cd4
pa[3][1]_value := 11
pa[3][1]_address := 0x7fff4a706cd8
pa[3][2]_value := 12
pa[3][2]_address := 0x7fff4a706cdc
g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
三、参考资料
1、 cpp 在线编译器 - https://coliru.stacked-crooked.com/
本文由 lnlidawei 原创、整理、转载,本文来自于【博客园】; 整理和转载的文章版权归属【原创作者】; 转载或引用时【请保留文章的来源信息】:https://www.cnblogs.com/lnlidawei/p/18547198

浙公网安备 33010602011771号