每日一练(三十六)


《每日一练合集》

2.21线性表

线性表是一种逻辑结构;

顺序表、链表是一种存储结构;
在这里插入图片描述

2.22 对称矩阵的压缩

画图比较直观
在这里插入图片描述

2.23 求二维数组元素存放地址

在这里插入图片描述

要明白行优先存储和列优先存储的区别!!!
在这里插入图片描述

2.24 二维数组转指针

在这里插入图片描述

2.25 取出三维数组中的元素

在这里插入图片描述

要求这里是按顺序取出三维数组中的元素,数组的下标不是顺序的,所以要进行运算之后才是对应位置的。

首先三维数组分为两组,所以第一个[]中应该是将12分为两组,而且范围限制是2,则[i/6]

然后是中间的[],分为四组,范围是2,则[i/3%2]

最后是[i%3],答案是a[i/6][i/3%2][i%3]

2.26 利用指针取数组元素的判断

在这里插入图片描述

选:A、C

对于这种类型的,统一转换为数组下标的形式:*(a+1) = a[1],指向a[1][0];所以**(a+1)+2相当于a[1][0]+2 = 6+2 = 8。所以AC正确。

*(a[1]+1) = a[1][1] = 8,D选项,虽然a[0]a的值相等,但是一个是指针变量,一个是地址常量,肯定是不一样的,而且a[0]的数据类型是int [3],a的数据类型是int (*)[3]

2.27 类型转换后的指针运算

在这里插入图片描述

很明显这里考察的是强制类型转换之后的指针运算,前面说了指针的运算是建立在数据类型的基础上的,数据类型有多大,指针+1就移动多大的内存。

*(char*)((char*)(cur)+2)根据优先级,cur是先结合(char*)cur,然后再+2,也就是先强转为char型的,再移动两个char的内存,然后再取出地址中的值转换为char类型,输出,那cur本来指向‘a’,运算之后就是c

*(char*)(cur+2),首先+2,此时cur还是结构体的数据类型,所以+2之后指向obj_array[2],即指向g的地址,所以取值转换为char之后输出就是g

所以最终输出cg

2.28 64位环境下的指针运算

在这里插入图片描述

//a、p1、p2都指向数组首地址,且三者的作用相同,数据类型都是 int(*)[4]
*(*(a+1)-1) = a[1][-1] = a[0][3] = 4
*(*(p1+3)-2)+1 = p1[3][-2] + 1 = a[2][2] + 1 = 1101
*(*(p2-1)+16)+2 = p2[-1][16] + 2 = a[-1][16] + 2 = a[3][0] + 2 = 13002
//p3是一个int指针指向数组首地址 p1是一个指针,指针的大小由系统决定,这里是64位系统,所以为8Byte
*(p3+sizeof(p1)-3) = *(p3+5) = a[0][5] = 60

4 1101 13002 60
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值