本文主要是介绍彻底理解c语言中int (*p)[3]和int *p[3]的意思,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
int *p[3]是指针数组,这个数组有3个元素,每个元素都是指针。int (*p)[3]是指向一维数组的指针变量,就是这个指针指向了一个一维的数组。
int (*p)[3] 数组指针,p是一个指针,指向1个有3个变量的数组
int*p[3]指针数组,p是一个有3个元素的数组,每个元素的类型是整形指针
int *p[3]
这种定义方式是我们非常熟悉的一种。
可以看出,定义数组的 []
的优先级还是要高于定义指针的 *
的优先级的,所以 int *p[3]
中,我们关注变量名 p
,它首先被解释为一个数组,然后这个数组的内容(每一个元素)都是 int *
类型
image.png
int (*p)[3]
先说下结论:p
指向一个数组!
对于 int (*p)[3]
,我们关注的对象 p
首先被括号括了起来:(*p)
,所以它首先被解释成了一个指针,而这个指针指向的内容,则是括号外所表示的内容:int [3]
,即一个长度为 3 的数组,所以指针 p
指向一块内存区域(请把它指向的内容看做一个整体)
image.png
与数组对比,有一些更有意思的发现,如:
int q[3];
int* p1 = q;
int (*p2)[3] = &q; // &q 的数据类型是 int (*)[3],实际上是吧全体数组元素当做一个整体来看待
std::cout << p[0][0] << std::endl; // 1
也就是说 p2
的类型与 &q
的类型相同,差不多可以看做一个二维指针,例如:
int q[6] = { 1,2,3,4,5,6 };
int(*p)[3] = (int(*)[3])q;
for (int i = 0; i < 2; ++i) {for (int j = 0; j < 3; ++j) {std::cout << p[i][j] << " ";}std::cout << std::endl;
}
输出:
1 2 3
4
这篇关于彻底理解c语言中int (*p)[3]和int *p[3]的意思的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!