lnlidawei

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

[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/

 

posted on 2024-11-15 00:24  lnlidawei  阅读(21)  评论(0)    收藏  举报