|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大佬们,这里面的 int(*p)[3]和int* px 一样吗,如果不一样,那他们分别代表含义呢
- #include <stdio.h>
- int main()
- {
- int array[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- int(*p)[3] = (int(*)[3]) & array;
- int* px = &array;
- printf("%d\n", p[2][2]);
- printf("%d", *(px + 8));
- return 0;
- }
复制代码
不一样。
int(*p)[3] 表示 p 是一个指针,指向一个大小为3的整型数组。这里的括号是必需的,
因为它们指示了 p 是一个指向整型数组的指针,而不是一个指向整型的数组指针。
在本例中,p 指向整型数组 array。
int* px 表示 px 是一个指向整型的指针。在本例中,px 指向整型数组 array 的第一个元素。
因此,p 和 px 是不同类型的指针,p 可以用来操作大小为 3 的整型数组,
而 px 只能用来操作单个整型变量。
在本例中,p 和 px 的初始值都是指向整型数组 array 的第一个元素的地址。
但是,由于它们是不同类型的指针,因此在使用它们进行指针运算和解引用时会有所不同。
在 printf 语句中,p[2][2] 表示指向 array[2][2] 元素的指针,而 *(px + 8) 表示指向 array[8] 元素的指针。
虽然这两个值在本例中相同,但这是因为数组 array 恰好是连续存储的整数值。
如果 array 中间插入了其他类型的元素,则 p 和 px 的值将不同。
|
|