数组指针赋值方式有哪些类型_数组给指针赋值

数组指针赋值方式有哪些类型_数组给指针赋值大家好,我是三玹。俗话说得好,C语言的指针是初学者的终点,也是高级Cer的起点。在步入指针广袤的海洋中,会碰到各类形形色色的指针。其中,数组指针和指针数组是是一开始容易混淆的两个概念。区分数组指针和指针数

数组指针赋值方式有哪些类型_数组给指针赋值

大家好,我是三玹。

俗话说得好,C语言的指针是初学者的终点,也是高级Cer的起点。

在步入指针广袤的海洋中,会碰到各类形形色色的指针。其中,数组指针和指针数组是是一开始容易混淆的两个概念。

区分数组指针和指针数组

虽然这两个东西看着像是孪生兄弟一样,但它们的概念和工作方式是截然不同的。尤其放在代码中,有时候也分不清谁是谁。

int (*arr)[5]; int *arr[5];

想要区分哪个是数组指针,哪个是指针数组,最主要的就是看它声明时的符号。

在编程语言中,每个符号都具备相应的优先级。就跟我们学数学,先乘除后加减一个道理。

而在上面这两个声明中,()[] 的优先级算是最高的,解引用运算符 * 的优先级就要次于二者。

由此代入到声明,第一个式子中先是定义了一个指针 *arr,指针变量 arr 指向一个长度为 5 的匿名数组,数组中存储的是 5 个 int 类型的数据。所以第一个声明的是一个数组指针

第二个声明中,[] 的优先级最高,因此变量名先和 [5] 进行组成,构成了一个长度为 5 arr 数组。

每个数组中的所有素都必须要有统一的类型,而此时的类型就是 int* 整型指针类型。即说明当前的 arr 数组中可以存储 5 个整数指针类型的值,所以第二个声明的是一个指针数组

这么说或许有点干,也有点绕,下面就将这两个拆开看一看。

数组指针

数组指针,它首先是一个指针,是指向数组的指针类型。允许用指针的方式,来访问数组中的素。

来看个例子,现在我们初始化了一个整形数组arr,里面包含了 5 个素:

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

而后,我们再声明一个ptr的指针,用来指向这个数组。

int *ptr = arr; 

当我们将数组变量赋值给指针变量,就是将数组的第一个素 arr[0] 所在的内存地址赋值给了指针 ptr

因此,我们就可以直接使用这个指针来访问数组中的素。

printf("%d\n", *ptr); // 输出 1 ptr++; // 指向下一个素 printf("%d\n", *ptr); // 输出 2

指针数组

指针数组则是不同于数组指针的另一个概念,它首先是一个数组,然后数组中的每个素都是一个指针

来看一个例子,假设我们有两个字符串:

char *str1 = "Hello"; char *str2 = "World";

此时,我们可以使用指针数组来存储这两个字符串:

char *str_arr[2] = {str1, str2}; 

这样一来,我们就可以使用下标来访问这个数组中的每个素,例如:

printf("%s %s\n", str_arr[0], str_arr[1]); // Hello World 

需要注意的是,这里使用的是下标来访问数组中的素,而不是用解引用运算符。

应用场景

在C语言当中,数组变量名本身就是一个指向数组第一个素的指针。因此,我们就可以直接将数组传递给函数来访问数组中的素,例如:

void print_array(int *arr, int size) { for(int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { intarr[5] = {1, 2, 3, 4, 5}; print_array(arr, 5); // 输出 "1 2 3 4 5" return0; }

在这个函数中,我们使用了数组指针来访问数组中的素。

指针数组,我们可以用来存储动态分配的内存,例如:

#define MAX_STRINGS 10 char *strings[MAX_STRINGS]; int main() { for(int i = 0; i < MAX_STRINGS; i++) { strings[i] = malloc(100); } // 在这里使用 strings 数组 for(int i = 0; i < MAX_STRINGS; i++) { free(strings[i]); } return 0; } 

在上面的代码中,我们使用了指针数组来存储动态分配的内存块。我们在用完这些内存后,需要使用 free 函数及时释放。

总结

在C语言中,数组指针和指针数组是两种很常见的概念。它们都是用来存储和访问数据,但两者的工作方式是不同的。

  • 数组指针是指向数组的指针类型,可以用解引用运算符来访问数组中的素;
  • 指针数组是存储指针的数组,可以通过下标来访问指针数组中的素。

它们分别都有自己相应的应用场景:

  • 数组指针,常用于函数参数中,方便在函数中访问数组中的素;
  • 指针数组,常用于动态分配内存,在使用完之后要及时释放内存。

学习数组指针和指针数组的时候,最重要的是要熟悉它们的工作方式,以及明白它们在 C 语言当中的应用场景。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/17237.html

(0)
上一篇 2024年 9月 16日
下一篇 2024年 9月 16日

相关推荐

关注微信