2024年6月2日发(作者:)

指针指向数组的两种赋值方法

指针是C语言中非常重要的概念,它可以让我们更加灵活地操作内

存中的数据。在C语言中,数组也是非常重要的数据结构,它可以

让我们更加方便地存储和操作一组数据。在本文中,我们将介绍两

种指针指向数组的赋值方法,分别是指针数组和数组指针。

一、指针数组

指针数组是指一个数组,其中的每个元素都是一个指针。这个指针

可以指向任何类型的数据,包括数组。下面是一个指针数组的定义:

```

int *arr[10];

```

这个定义表示一个包含10个元素的数组,每个元素都是一个指向

int类型数据的指针。我们可以通过下标来访问数组中的元素,例如:

```

arr[0] = (int *)malloc(sizeof(int) * 10);

```

这个语句表示在arr数组的第一个元素中分配了10个int类型的空

间。我们可以通过指针来访问这个空间中的数据,例如:

```

*(arr[0] + 1) = 10;

```

这个语句表示将arr数组的第一个元素中的第二个int类型空间的值

设置为10。我们也可以使用下标来访问这个空间中的数据,例如:

```

arr[0][1] = 10;

```

这个语句和上面的语句是等价的。

指针数组的优点是可以方便地存储和操作一组指针,例如我们可以

使用一个指针数组来存储一组字符串:

```

char *strs[3] = {"hello", "world", "c language"};

```

这个语句表示定义了一个包含3个元素的指针数组,每个元素都是

一个指向char类型数据的指针。我们可以通过下标来访问数组中的

元素,例如:

```

printf("%sn", strs[0]);

```

这个语句表示输出strs数组的第一个元素,也就是字符串"hello"。

二、数组指针

数组指针是指一个指针,它指向一个数组。这个数组可以是任何类

型的数据,包括指针。下面是一个数组指针的定义:

```

int (*arr)[10];

```

这个定义表示一个指向包含10个int类型数据的数组的指针。我们

可以通过下面的语句来分配这个数组的空间:

```

arr = (int (*)[10])malloc(sizeof(int) * 10);

```

这个语句表示在内存中分配了一个包含10个int类型数据的数组,

并将arr指针指向这个数组。我们可以通过指针来访问这个数组中

的数据,例如:

```

*(*(arr + 0) + 1) = 10;

```

这个语句表示将arr指针指向的数组中的第二个int类型空间的值设

置为10。我们也可以使用下标来访问这个数组中的数据,例如:

```

(*arr)[1] = 10;

```

这个语句和上面的语句是等价的。

数组指针的优点是可以方便地操作一个数组,例如我们可以使用一

个数组指针来操作一个二维数组:

```

int (*matrix)[3] = (int (*)[3])malloc(sizeof(int) * 2 * 3);

```

这个语句表示定义了一个指向包含2行3列int类型数据的二维数

组的指针。我们可以通过指针来访问这个二维数组中的数据,例如:

```

*(*(matrix + 0) + 1) = 10;

```

这个语句表示将matrix指针指向的二维数组中的第一行第二列的值

设置为10。我们也可以使用下标来访问这个二维数组中的数据,例

如:

```

matrix[0][1] = 10;

```

这个语句和上面的语句是等价的。

总结

指针数组和数组指针都是非常重要的概念,它们可以让我们更加灵

活地操作内存中的数据。指针数组可以方便地存储和操作一组指针,

而数组指针可以方便地操作一个数组。在实际编程中,我们需要根

据具体的需求来选择使用哪种方法。