本文共 1135 字,大约阅读时间需要 3 分钟。
线性表是一种逻辑结构;
顺序表、链表是一种存储结构;
画图比较直观
要明白行优先存储和列优先存储的区别!!!
要求这里是按顺序取出三维数组中的元素,数组的下标不是顺序的,所以要进行运算之后才是对应位置的。
首先三维数组分为两组,所以第一个[]中应该是将12分为两组,而且范围限制是2,则[i/6]
;
然后是中间的[],分为四组,范围是2,则[i/3%2]
最后是[i%3],答案是a[i/6][i/3%2][i%3]
选: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]
。
很明显这里考察的是强制类型转换之后的指针运算,前面说了指针的运算是建立在数据类型的基础上的,数据类型有多大,指针+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
。
//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] = 604 1101 13002 60
转载地址:http://gxwzi.baihongyu.com/