int (*p)[n], 是一个数组指针(只有一个指针),p指针指向一个整型的一维数组,在指针的移动过程中存在一个问题,那就是p+1,将指向的下一个维数字,即p的指向地址增加了4*n
int *p1[n],是一个指针数组(有n个指针),是一个整型指针数组,有n个指针类型的数组元素。
1 #include<stdio.h>
2
3 int main()
4 {
5 int i,j;
6 int a[10] = {0,1,2,3,4,5,6,7,8,9};
7 int b[10][10] = {
8 {0,1,2,3,4,5,6,7,8,9},
9 {0,1,2,3,4,5,6,7,8,9},
10 {0,1,2,3,4,5,6,7,8,9},
11 {0,1,2,3,4,5,6,7,8,9},
12 {0,1,2,3,4,5,6,7,8,9},
13 {0,1,2,3,4,5,6,7,8,9},
14 {0,1,2,3,4,5,6,7,8,9},
15 {0,1,2,3,4,5,6,7,8,9},
16 {0,1,2,3,4,5,6,7,8,9},
17 {0,1,2,3,4,5,6,7,8,9}};
18 int *p1[10] ;
19 int (*p2)[10];
20 int (*p3)[10];
21 p2 = a;
/*我们将p2赋值为一个一维数字,但在显示数字内容之时,我们需要考虑指针的偏移范围。编译过程会产生警告,可用二维数组进行赋值。
$ gcc -o test_1 test_1.c
test_1.c: In function ‘main’:
test_1.c:21:5: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
p2 = a;
*/
22 for( i = 0 ;i < 10 ; i++)
23 {
24 p1[i] = b[i];
25 p3 = b;
26 // (*p2)[i] = a[i];
27 printf("\n//\n");
28 printf("The *(p2 + %d) is %d\n",i,*(p2 + i));
29 printf("The *(p2)[%d] is %d\n",i,*(p2)[i]);
30 printf("The *p2[%d] is %d\n",i,p2[i]);
31 printf("The *p2[0][%d] is %d\n",i,p2[0][i]);
32
33 printf("\n");
34 printf("The *(p3 + %d) is %d\n",i,*(p3 + i));
35 printf("The *(p3)[%d] is %d\n",i,*(p3)[i]);
36 printf("The *p3[%d] is %d\n",i,p3[i]);
37 printf("The *p3[0][%d] is %d\n",i,p3[i][i]);
38 /* for(j = 0; j < 10 ; j++)
39 {
40 printf("The *p1[%d][%d] is %d\n",
41 i,j,*(*(p1 + i) + j));
42
43 }
44
45 printf("\n----------------------------\n");
46
47 for(j = 0; j < 10 ; j++)
48 {
49 printf("The *p1[%d][%d] is %d\n",
50 i,j,p1[i][j]);
51 }
52 */
53 printf("\n");
54 }
55 return 0;
56 }
在C++ 中vector来存储数据,那么有一个问题,vector是相当一个数组指针存储数据,还是一个指针数据的模式去存放着数据???正在纠结着。