c语言课后作业求助
C语言第二十三课后作业第6题int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = &array;
printf("%d\n", *(*(p+1)-6));
return 0;
}
我的疑问是:p + 1 指向整个数组最后的位置(第二个 array 数组的起始位置),那么 p+1 不就是&array了吗?为什么 *(p+1)才是&array ? p是个数组指针 类型是 int *【10】 跨度是 int 【10】, array的跨度是 int(4byte)
p+1加指向类型的宽度 + int*10(40 byte)
p+1( int *【10】) 的值== array+10 (int*) 但类型不一样
p+1 指向的是后一个 包含十个整型的数组 array+10指向第十一个整型
*(p+1)解引用之后指向整型 == array+10
// C语言第二十三课后作业第6题
#include<stdio.h>
int main()
{
int array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = &array;
printf("%d\n", *(*(p+1)-6)); // *(p + 1)指向的是array的地址 (&arrat - 6)相当于array[-5] = array
return 0;
}
在二维数组中*(p+1)是取二维数组第二行的地址 关于指针我教你个小技巧,c语言的声明其实就告诉你了一切,就说这个int (*p),也就是说任何形如(*(p+i))的格式的值为int,而我们知道在c语言中a==*(a+i),这俩个等价,所以可以看出p是个二级指针,而&array显然是一个一级指针;
这个方法判断方法试用所有类型的指针,比如单纯申明个二级指针,int **p,也就是说**P的类型为int
页:
[1]