📅  最后修改于: 2023-12-03 15:29:06.965000             🧑  作者: Mango
在 C 语言中,(*m)[5]
和 *m[5]
属于不同类型的语法,其含义也不同。正确理解它们之间的区别对于程序员来说是很重要的。
在 C 语言中,指针类型表示一个指向变量的地址。对指针类型进行解引用(dereference)操作,可以访问该指针所指向地址上的变量。
(*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 的第 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 个元素所指向的变量。在使用这两种语法时,需要根据语境和需求正确选择。