📜  指向数组的指针与指针数组之间的区别(1)

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

指向数组的指针与指针数组之间的区别

编程中经常会用到数组和指针,有时需要用到指向数组的指针和指针数组,这两者虽然有些相似之处,但也有很大的区别。

指向数组的指针

指向数组的指针是指一个指针变量,它存储的是数组的第一个元素的地址。通过对这个指针变量操作,可以访问数组中的所有元素。

下面是一个例子:

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;

这里定义了一个有5个元素的整型数组,并初始化了它的元素,然后又定义了一个指向整型的指针变量p,并将arr的地址赋值给了p。

通过p指针变量可以访问arr数组的所有元素,例如:

printf("%d\n", *p);    //输出1
printf("%d\n", *(p+1));    //输出2
printf("%d\n", *(p+2));    //输出3
printf("%d\n", *(p+3));    //输出4
printf("%d\n", *(p+4));    //输出5
指针数组

指针数组是指一个数组,这个数组的元素是指针类型。每个元素都存储着一个指针,这些指针可以指向不同的变量、函数或数组。

下面是一个例子:

int a = 10, b = 20, c = 30;
int *arr[3] = {&a, &b, &c};

这里定义了三个整型变量a、b、c,然后定义了一个指针数组arr,这个数组有3个元素,每个元素都是一个指向整型的指针,且这3个指针分别指向a、b、c这三个变量。

通过指针数组可以方便地访问不同的变量,例如:

printf("%d\n", *arr[0]);    //输出10
printf("%d\n", *arr[1]);    //输出20
printf("%d\n", *arr[2]);    //输出30
区别

指向数组的指针和指针数组之间最主要的区别在于它们的定义和使用:

  1. 指向数组的指针是一个指针变量,存储的是数组的首个元素的地址,通过它可以访问整个数组的元素;而指针数组则是一个数组,它的元素都是指针类型,每个元素存储的是一个指针,这些指针可以指向不同的变量、函数或数组。

  2. 指向数组的指针可以被用于指向任何类型的数组,只要它们被赋予了相应的指针类型;而指针数组则是只能存储指向特定类型的指针。

  3. 指向数组的指针通常用于访问数组的元素。指针数组通常用于在程序中处理不同类型的数据,例如指向函数的指针。

总结

指向数组的指针和指针数组都非常有用,但它们有不同的用途和定义。理解它们之间的区别和联系,对于编写清晰、高效的代码是非常重要的。