一、intx[6][4],(*p)[4];p=x;则*(p+2)指向哪里?
- A X[0][1]
- B X[0][2]
- C X[1][0]
- D X[2][0]
官方解释: D
int x[6][4], (*p)[4];
p = x;
在这里,x 是一个二维数组,它有6行和4列。p 是一个指向具有4个整数的数组的指针。
当你执行 p = x; 时,p 指向 x 的第一行。
接下来,我们要考虑 *(p + 2)。
在C语言中,数组名(如 x)代表其首地址。对于二维数组,它实际上是指向第一行的指针。当你对这样的指针进行加法操作时,你会跳过整行,而不是单个元素。
因此,p + 2 会跳过前两行,指向 x 的第三行。
*(p + 2) 会解引用这个指针,所以它实际上就是 x 的第三行。所以,*(p + 2) 指向 x 的第三行的首地址。
为了更直观地理解,你可以这样想象:
p指向x[0](第一行)p + 1指向x[1](第二行)p + 2指向x[2](第三行)
所以,*(p + 2) 就是 x[2],它指向 x 的第三行的首地址。
自己的理解:
假设我们有一个叫做x的大表格,这个表格有6行和4列。就像你在纸上画格子一样,每个格子可以放一个数字。
然后,我们有一个指针p,它就像一个小箭头,可以指向这个大表格的某一行。
当我们说p = x;的时候,就是把小箭头指向这个大表格的第一行。
接下来,我们要看*(p + 2)是什么意思。
想象一下,这个小箭头每次移动,不是一格一格地移动,而是整行整行地移动。所以,当箭头移动两次时,它就跳过了两行,指向了第三行。
*(p + 2)的意思就是,箭头移动两次后指向的那一行。所以,*(p + 2)指向的就是大表格的第三行。
简单说,就像你在纸上画了一个大表格,然后有一个小箭头指向第一行,当你让箭头跳两下,它就指向了第三行。这就是*(p + 2)的意思啦!
考点
这道题的考点是C语言中的指针和数组的理解。
它主要考察了以下几个方面:
-
指针与数组的关系:在C语言中,数组名可以视为指向数组首元素的指针。对于二维数组,数组名实际上是指向第一行的指针。
-
指针的加法运算:对于指向数组的指针,进行加法运算时,不是按单个元素的大小来移动,而是按指针指向的整个数组或数据块的大小来移动。例如,对于指向int数组的指针,加1意味着跳过整个int大小的空间;对于指向二维数组(即数组的数组)的指针,加1意味着跳过整个一行的空间。
-
指针的解引用:使用
*操作符可以解引用指针,即获取指针指向的值。对于指向数组的指针,解引用得到的是数组的首元素或首行的地址。
二、有关C++中为什么用模板类的原因,描述错误的是?
- A.可用来创建动态增长和减小数据结构
- B.它是类型无关的,因此具有很高的复用性
- C.它运行时检查数据类型,保证了类型安全
- D.它与平台无关,可移值性
官方解释: C

文章详细解析了C语言中指针操作(包括二维数组和指针加法),C++模板类的使用及其误区,静态数据成员的特点,构造函数和拷贝构造函数的调用,以及宏的使用实例。
最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



