📜  (*m) [5] 和 *m [5] 之间的区别 (1)

📅  最后修改于: 2023-12-03 15:29:06.965000             🧑  作者: Mango

(*m)[5] 和 *m[5] 之间的区别
概述

在 C 语言中,(*m)[5]*m[5] 属于不同类型的语法,其含义也不同。正确理解它们之间的区别对于程序员来说是很重要的。

指针类型

在 C 语言中,指针类型表示一个指向变量的地址。对指针类型进行解引用(dereference)操作,可以访问该指针所指向地址上的变量。

(*m)[5]

(*m)[5] 表示 m 是一个指针,该指针指向一个数组,该数组有 5 个元素,每个元素的类型为指针所指向的类型。 括号的作用是确保 *m 的优先级高于 [5],因为 * 运算符比 [ ] 运算符的优先级高。

int arr[5] = {1, 2, 3, 4, 5};
int (*m)[5] = &arr; // 声明指向长度为 5 的整数数组的指针,指向 arr 数组
printf("%d\n", (*m)[0]); // 取出指针 m 所指向的数组的第 1 个元素,输出 1
*m[5]

*m[5] 表示 m 是一个指针数组,该数组中有 5 个元素,每个元素的类型为指针所指向的类型。其中 * 运算符的优先级比 [ ] 运算符的优先级高,所以 *m[5] 表示取出指针数组 m 的第 6 个元素,然后对该元素进行解引用操作,得到该指针所指向的变量。

int a = 1, b = 2, c = 3, d = 4, e = 5;
int *arr[5] = {&a, &b, &c, &d, &e}; // 声明一个指针数组,每个元素保存着指向 int 变量的指针
printf("%d\n", *arr[0]); // 取出指针数组 arr 的第 1 个元素,对该指针进行解引用,输出 1
总结

(*m)[5] 表示指向长度为 5 的数组的指针,*m[5] 表示指针数组的第 6 个元素所指向的变量。在使用这两种语法时,需要根据语境和需求正确选择。