C语言-2019年九1
2019年九 1
//2019年九 1
void foo(int [][3]);
main(){
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("%d",a[2][1]);
}
void foo(int b[][3]){
++b;
b[1][1]=9;
}
输出为 9
因为在将a数组作为参数传入,传递的是数组的初始地址,b就代表这个数组的初始地址(b指向了这个数组的首地址即a[0][0])
当作了++b的时候,此时b指向的是地址是a[1][0](即b[0][0]代表的是a[1][0])
再对b[1][1]赋值为9,那么修改原来的地址中的就是a[2][1]的值为9
可以打印出b修改前后的打印数值
void foo(int [][3]);
main(){
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf("最终打印输出a[[2][1]: %d \n",a[2][1]);
}
void foo(int b[][3]){
printf("输出b的第一个值b[0][0]:%d \n",b[0][0]);
++b;
printf("对b引用进行++操作后输出b[0][0]:%d \n",b[0][0]);
b[1][1]=9;
printf("修改了b[1][1]之后输出b[0][0]:%d \n",b[0][0]);
printf("修改了b[1][1]之后输出b[0][1]:%d \n",b[0][1]);
printf("修改了b[1][1]之后输出b[1][0]:%d \n",b[1][0]);
printf("修改了b[1][1]之后输出b[2][0]:%d \n",b[2][0]);
}
会发现,b指针移动之后,b[0][0]对应的值就是a[1][0],而且修改b[1][1]对b[0][0]无影响
边界b[2][0]对应的值因为已经超出了数组的地址范围了。