什么是指针数组?

一个数组,里面存放的元素均为指针类型数据,被称为指针数组。

其定义形式?

int *name[4];

基本实例一:利用数组初始化指针数组

#include<stdio.h>
#include<iostream>
#include<string.h>

int main() {
    int a[5] = { 1,2,3,4,5 };
    int* name[5] = { &a[0], &a[1], &a[2], &a[3], &a[4] };
    int i;
    for ( i = 0; i < 5; i++)
    {
        printf("%d\n", *name[i]);
    }
    system("pause");
    return 0;
}

基本实例二:将字符串按照从小到大进行排序

#include<stdio.h>
#include<iostream>
#include<string.h>

//将字符串按其首字母进行排序
//传入的是指针数组
void sort(char* str[],int n) {

    char* tmp;
    int i, j, k;
    //从第0个位置开始,到倒数第二个字符串
    for (i = 0; i < n-1; i++)
    {
        //k用于记录当前的字符串小标,

        k = i;
        //遍历第i个之后的字符串,到最后一个为止
        for ( j = i+1; j < n; j++)
        {    //strcmp用于比较字符串str1和str2是否相同。如果相同则返回0;
            //如果不同,在不同的字符处如果str1的字符大于str2的字符,则返回1,否则返回-1
            if(strcmp(str[k],str[j])>0)
            {    //    将较小的赋值给k
                k = j;
            }
            //如果当前最小的位置已经不是i了,就将第i个位置和第k个位置的字符串进行交换
            if (k != i) 
            {
                tmp = str[i];
                str[i] = str[k];
                str[k] = tmp;
            }
        }
    }
}
void print(char* str[], int n) {
    int i;
    for ( i = 0; i < n; i++)
    {
        printf("%s\n", str[i]);
    }
}
int main() {
    //定义一个指针数组,指向的是数组中的每一个字符串
    //注意在visual stdio2019中会报错,
    //中的第一种方式,一了百了
    char* str[] = { "hello","goodbye","hi","hella" };
    void sort(char* str[], int n);
    void print(char* str[], int n);
    int n = 4;
    sort(str, n);
    print(str, n);
    system("pause");
    return 0;
}

输出:

c语言之指针数组_指针数组