- 指针数组
int *p1[10];
数组的每一个元素都是地址,sizeof(p) = 40;
- 数组指针
int(*p2)[10];
数组的每一个元素都是一个数组的首地址,sizeof(p2) = 4;
实现不改变原来的数组元素位置来实现冒泡排序,使用指针数组
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void main() 5 { 6 int a[10] = { 0, 9, 2, 8, 3, 7, 4, 6, 5, 10 }; 7 int *p[10];//指针数组 8 for (int i = 0; i < 10; i++) 9 { 10 p[i] = a + i; 11 } 12 13 //冒泡排序 14 for (int i = 0; i < 10 - 1; i++) 15 { 16 for (int j = 0; j < 10 - 1 - i; j++) 17 { 18 if (*p[j]>*p[j + 1]) 19 { 20 int *ptemp = p[j]; 21 p[j] = p[j + 1]; 22 p[j + 1] = ptemp; 23 } 24 } 25 } 26 27 //输出 28 for (int i = 0; i < 10; i++) 29 { 30 printf(" %d %d", a[i], *p[i]); 31 } 32 33 system("pause"); 34 }
数组指针存储一个二维数组
int a[3][4] = { 0 }; for (int i = 0; i < 12; i++) { a[i / 4][i % 4] = i; } for (int *p = &a[0][0]; p < a + 3; p++) { printf("%d ", *p); } int(*p)[4] = a;//指针数组 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("%d ", p[i][j]); } printf(" "); }