指针和数组笔试题解析T2_指针笔试题解析

今日份练习“指针和数组”试题练习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;
}

老样子先读一读代码~(动手画一画图)看看 结果是否和运行的一样呢?

👇

👇

👇

指针和数组笔试题解析T2_指针笔试题解析_02

✨答案是“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]的地址是什么呢?

二维数组用一维数组画图表示为: 指针和数组笔试题解析T2_指针笔试题解析_03

把arr[0]看成一维数组的数组名,数组名即首元素的地址,所以 p=arr[0];

元素 “1” 的地址赋予了p。

则 printf("%d",p[0]);p[0]等价于*(p+0),p的地址未发生改变进行解引用得到整型“1”。

😃你学废了嘛?

敬请期待下一题~

指针和数组笔试题解析T2_指针笔试题解析_04