📜  指向数组的指针和指针数组的区别(1)

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

指向数组的指针和指针数组的区别

在C语言中,指针和数组是两个非常重要的概念。指向数组的指针和指针数组是两个容易混淆的概念,下面将详细介绍它们之间的区别。

指向数组的指针

指向数组的指针是一个指向数组首元素的指针变量。例如,下面的代码定义了一个指向整型数组的指针变量p,并将其指向数组a的第一个元素。

int a[5] = {1, 2, 3, 4, 5};
int *p = &a[0]; // p指向数组a的第一个元素

可以用指针访问数组的元素,例如:

printf("%d", *(p+1)); // 输出2

指向数组的指针可以用于遍历数组,例如:

for(int i=0; i<5; i++){
    printf("%d", *(p+i));
}
指针数组

指针数组是一个数组,它的每个元素都是一个指针变量。例如,下面的代码定义了一个指针数组ptr,它有三个元素,分别是指向整型变量a、b、c的指针。

int a = 1, b = 2, c = 3;
int *ptr[3] = {&a, &b, &c};

可以用指针数组访问每个指针变量指向的值,例如:

printf("%d", *ptr[1]); // 输出2

指针数组也可以用于遍历数组,例如:

for(int i=0; i<3; i++){
    printf("%d", *ptr[i]);
}
区别

指向数组的指针和指针数组的区别在于:

  • 指向数组的指针是一个指针变量,它只指向数组的首元素;指针数组是一个数组变量,它的每个元素都是一个指针变量。
  • 通过指向数组的指针可以访问数组中的每个元素,但不能改变指针的指向;通过指针数组可以访问每个指针变量指向的值,也可以改变指针数组元素的值(即改变指针变量的指向)。

例如,下面的代码演示了如何通过指针数组修改指针变量的指向:

int x = 1, y = 2, z = 3;
int *ptr[3] = {&x, &y, &z};
int a = 4, b = 5, c = 6;
for(int i=0; i<3; i++){
    ptr[i] = (i==0)? &a : (i==1)? &b : &c;
}
printf("%d", *ptr[0]); // 输出4
总结

指向数组的指针和指针数组都有它们自己的用处,要根据具体的情况选择使用。指向数组的指针适用于遍历数组或多维数组;指针数组适用于存储一组指针或动态管理内存。了解它们之间的区别,有助于写出更加简洁、优雅的代码。