目录
例题1:输入二维数组的行和列,找出对应二维数组行列的那个值。
一、二维数组的地址认识
访问二维数组值的示意图
1.代码演示
#include<stdio.h>
int main()
{
int arr[3][4] = {
{1,3,5,7},{2,4,5,6},{11,22,33,44}};
//三行四列的二维数组
printf("arr是行的地址%p,偏移后行的地址是 %p \n",arr,arr+1);//二维数组偏移一个行地址,去介于列有多少个元素,这里是四列,类型为int型,所以行偏移16个字节大小。
printf("arr[0]是列数组地址 %p ,偏移后地址是 %p \n",arr[0],arr[0]+1);
printf("arr[0]是列数组地址 %p ,偏移后地址是 %p \n",*(arr+0),*(arr+0)+1);
printf("arr[0]是列数组值 %d ,偏移后值是 %d \n", *(*(arr+0)) , *(*(arr+0)+1) );
return 0;
}
运行结果:
arr是父亲地址000000000061FDF0,偏移后地址是 000000000061FE00
arr[0]是子数组地址 000000000061FDF0 ,偏移后地址是 000000000061FDF4
arr[0]是子数组地址 000000000061FDF0 ,偏移后地址是 000000000061FDF4
arr[0]是子数组值 1 ,偏移后值是 3
2. 代码演示
#include<stdio.h>
int main()
{
int arr[3][4] = {
{1,3,5,7},{2,4,5,6},{11,22,33,44}};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
printf("地址是%p,值是%d\n",&arr[i][j],arr[i][j]);
printf("地址是%p,值是%d\n",arr[i]+j,*(arr[i]+j)); //arr[i]+j 二维数组在这里arr[i]是数组名字
printf("地址是%p,值是%d\n",*(arr+i)+j,*(*(arr+i)+j));
putchar('\n');
}
putchar(