冲击991 两道C题
作者:互联网
题一
这个知识点, 之前在书中有看到过, 但是当时并不是太理解, 书中是这么说的:
在C中, 对一个指针+1的结果是对该指针增加一个存储单元. 对于数组而言, 地址会增加到下一个元素.
刚看到这道题的时候, 我想这题我会啊! &a是数组的地址, 同时也是数组中第一个元素的地址, +1表示, 指向了数组的第二个元素, 简单, 选D!
然鹅, 终究是too young, 答案是B
看了下答案, 表示没看懂, 于是我请教了一下我的发小, 哈工大的一位硕士大佬, 他表示, &a是数组a的首元素地址, &a+1 表示, 下一个数组的首元素地址! 听完我更懵逼了, 什么叫下一个数组?下以一个数组是啥? 大佬表示, C语言语法就是这个样子! deideidei, 您是大佬说啥都对! 本着实践出真知的原则, 我坚持要用事实说话, 于是我打开了xcode
emmm, 大佬说的是对的, 真香!
我们可以看到, &a+1的地址是0x7ffee60a64f4, 而&a[4]的地址0x7ffee60a64f0, 正好地址高了4个字节(int), 这就是真理!
于是, 我总结了, &a表示数组的地址,&a+1表示以当前数组为单位 一个数组一个数组的往下移动, a表示的数组第一个元素的地址, a+1表示的一个元素一个元素的往下移动. 所以选B
题二
这个题就比较简单了, 首先, 计算机中内部存储时并没有二维数组的概念! 所以说, 3×3就是内部存储时,就是一维数组, 大致是这个样子[a[0][0],a[0][1],a[0][2],a[1][0], a[1][1],a[1][2],a[2][0],a[2][1], a[2][2]].
p是二维数组a的列指针, 即元素指针, 分别对[a[0][0],a[0][1],a[0][2],a[1][0], a[1][1],a[1][2],a[2][0],a[2][1], a[2][2]]赋值1-9, 所以a[1][2] = 6, 也选B
标签:表示,991,元素,冲击,地址,数组,大佬,两道,指针 来源: https://blog.csdn.net/weixin_43837354/article/details/104693913