29.指针数组和数组指针

  • 指针数组
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("
");
    }
原文地址:https://www.cnblogs.com/xiaochi/p/8308763.html