📜  C |高级指针|问题3(1)

📅  最后修改于: 2023-12-03 14:59:38.971000             🧑  作者: Mango

高级指针问题3

在C语言中,指针是一种强大的工具,它可以提高程序的效率和灵活性。然而,在使用指针时,由于程序员不小心或者理解不到位,可能会导致不可预期的后果,如程序崩溃、数据损坏等问题。

这里将介绍一个高级的指针问题:指针数组和数组指针的区别。这两种类型的指针经常会混淆,但它们有很大的区别,这里将分别进行介绍。

指针数组

指针数组是一个由指针组成的数组。换句话说,它是指向指针的数组。指针数组的声明方式为:

datatype *pointer_array[num];

其中,datatype是指针指向的数据类型,pointer_array是指针数组的名称,num是指针数组的元素个数。

指针数组的一个常见用途是将多个字符串存储在一个数组中。例如,我们可以将多个字符串存储在一个字符串数组中:

#include <stdio.h>

int main()
{
    char *str_array[] = {"apple", "banana", "cherry", "date"};

    for(int i = 0; i < 4; i++)
    {
        printf("%s\n", str_array[i]);
    }

    return 0;
}

输出:

apple
banana
cherry 
date
数组指针

数组指针是一个指向数组的指针。数组指针的声明方式为:

datatype (*pointer_array)[num];

其中,datatype是数组元素的数据类型,pointer_array是数组指针的名称,num是数组的元素个数。

和指针数组不同,数组指针指向的是整个数组,而不是数组中的一个元素。例如,我们可以声明一个指向二维数组的指针:

#include <stdio.h>

int main()
{
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    int (*p)[4] = arr;

    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            printf("%d ", p[i][j]);
        }
        printf("\n");
    }

    return 0;
}

输出:

1 2 3 4
5 6 7 8
9 10 11 12
总结

指针数组和数组指针是两种不同的指针类型,它们有着很大的区别。指针数组是由指向指针的数组组成,而数组指针是指向数组的指针。程序员在使用指针时,需要清楚地知道它们的区别,以便正确地进行指针操作。