今日份练习“指针和数组”试题练习2
前言:
对指针和二维数组中的理解运用,下面这题结合了逗号表达式,看你能否理解其中的奥秘?
T2:
#include<stdio.h>
int main()
{
int arr[3][2]={(0,1),(2,3),(4,5)};
int *p=NULL;
p=arr[0];
printf("%d",p[0]);
return 0;
}
老样子先读一读代码~(动手画一画图)看看 结果是否和运行的一样呢?
✨
揭
👇
晓
👇
答
👇
案
✨
✨答案是“1”✨
解析:
对于这种笔试性的编程体,主要是考察我们的代码理解能力,相当于如何更好的理解代码,就是以画图的方式来使其抽象的理解它。
1.int arr[3][2]={(0,1),(2,3),(4,5)};
//数组arr是二维数组,其初始化值为{(0,1),(2,3),(4,5)}
,表面看似有六个值,但其中分成了三个逗号表达式的部分。
巩固逗号表达式:逗号表达式从左往右运算,且逗号表达式的值为最后一个表达式的值。
则{(0,1),(2,3),(4,5)}
的值为👉{1,3,5}
arr二维数组中初始化的值为arr[3][2]={1,3,5};
2.int *p=NULL;
p=arr[0];
//整型指针p存放arr[0]的地址
且arr[0]的地址是什么呢?
二维数组用一维数组画图表示为:
把arr[0]看成一维数组的数组名,数组名即首元素的地址,所以
p=arr[0];
元素 “1” 的地址赋予了p。
则 printf("%d",p[0]);
中p[0]等价于*(p+0),p的地址未发生改变进行解引用得到整型“1”。
😃你学废了嘛?
敬请期待下一题~