每日一练8.15

1、下面程序输出结果为多少(在32位和64位操作系统上分别是多少?

struct st_t
{
	int status;
	short *pdata;
	char errstr[32];
};
int main(int argc, const char *argv[])
{
	struct st_t st[16];
	char *p = (char *)( st[2].errstr + 32);
	printf("%d", p - (char *)(st));
}


32位:120
64位:144
注:其实就是求3个结构体st_t的大小

2、下面程序的输出结果

struct HAR
{
	int x;
	int y;
	struct HAR *p;
}h[2]
int main(int argc, const char *argv[])
{
	h[0].x = 1;
	h[0].y = 2;
	h[1].x = 3;
	h[1].y = 4;
	h[0].p = &h[1];
	h[1].p = h;
	printf("%d %d\n", (h[0].p)->x, (h[1].p)->y);
}


3 2

3、下面程序的结果是多少?

void fun(int *s)
{
	static int i = 0;
	do{
		s[i] += s[i+1];
	}while(++i < 2);
}
int main(int argc, const char *argv[])
{
	int k;
	int a[10] = {1, 2, 3, 4, 5};
	for(k=1; k<3; k++)
		fun(a);
	for(k=0; k<5; k++)
		printf("%d", a[k]);
	return 0;
}


3 5 7 4 5

4、已知二维数组是int a[m][n],试用数组指针和一级指针分别表示a[i][j],并思考二级指针如何表示a[i][j]。

	int a[3][3] = {1,2,3,4,5,6,7,8,9};
	int (*p)[3] = a;  //指针数组 
	int *p1 = a[0];   //一级指针 
	int **p2 = &p1;   //二级指针,二级指针不能直接指向数组,可用一级指针当桥梁
	//输出a[2][1] = 8 
	printf("%d\n",*(p[2] + 1));
	printf("%d\n",*(*(p+2) + 1));
	printf("%d\n",p[2][1]);
	
	printf("%d\n",*(p1 + 2 * 3 + 1));
	
	printf("%d\n",*(*p2 + 2 * 3 + 1));
	return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值