搜狗笔试题2

下面程序执行结果为【说明:X86_64环境】

int main(void)
{
	int a[4][4] = {
		          {1,2,3,4},
				  {50,60,70,80},
				  {900,1000,1100,1200},
				  {13000,14000,15000,16000} };
	int (*p1)[4] = a;
	int (*p2)[4] = &a[0];
	int *p3 = &a[0][0];
	printf("%d %d %d %d\n",*(*(a+1)-1),*(*(p1+3)-2)+1,*(*(p2-1)+16)+2,*(p3+sizeof(p1)-3));
	
	return 0;
}


A、16000 1101  13002 2
B、4  2  3  60
C、16000  2  3  2
D、4  1101  13002  60

 

解析:

*(*(a+1)-1) 其中a+1中的1代表维数,a+1实际上指向第二行首元素地址,*(a+1)则是取出地址,(*(a+1)-1)则是指向前一个元素,即第一行最后一个元素,*(*(a+1)-1) 取出该元素值,为4;

*(*(p1+3)-2)+1 其中p1+3指向第四行首元素的地址,*(p1+3)取出该地址,*(p1+3)-2指向前一个元素的前一个元素,*(*(p1+3)-2)+1取出该元素,并将其值加1;

*(*(p2-1)+16)+2 其中p2-1中的1指的是维数,需要向前退4个元素地址,*(p2-1)取出该地址,*(p2-1)+16向后进16个元素地址,即指向13000,*(*(p2-1)+16)+2取出该元素值,并加2;

*(p3+sizeof(p1)-3) 其中sizeof(p1)为8,因为是64位机,p3+sizeof(p1)-3指后进5个元素地址,指向60,*(p3+sizeof(p1)-3)取出该元素值;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值