有这么一个题`
#include<stdio.h>
int main()
{
int arr[5][2] = { 1,2,3,4,5,6,7,8,9,10 };
int(*s)[2] = &arr[1];
int* p = arr[1];
printf("%d\n", s[1][3]);
printf("%d\n", p[3]);
return 0;
}
获取各变量的值和地址如下
int(*s)[2]=&arr[1]
意思是我先声明一个元素大小为2的整型指针数组,将数组arr[1]的地址赋值给s,arr[1]的地址正好是二维数组3的地址,结果是要打印s[1][3],s[1][3]表示的是第二行的第三个元素,而我声明的是大小为2,则会出现这种情况:我只能打印出连续的两个元素,但是我要求打印三个元素,所以会“借用”其它元素,所以s[0][0]打印3,s[0][1]打印4,s[0][2]打印5,s[1][0]打印6,s[1][1]打印7,s[1][2]打印8。
int *p=arr[1]
意思是声明一个整型指针p,把arr[1]的地址赋值给p,p是指向arr[1]的,现在要打印p[3],意思就是以arr[1]的地址为基址,向后挪3个位置,结果就是6.
所以结果打印的就是8和6