电视剧千金归来剧照:c语言问题?不懂,请写明过程.

来源:百度文库 编辑:高考问答 时间:2024/05/10 06:25:05
main()
{int a[3][3]={1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++) s+=a+a[3-i-1];
printf("%d\n",s);
}



main()
{union
{char ch[2];
int d;
}s;
s.d=Ox4321;
printf("%x,%x\n",s.ch[0],s.ch[l]);
}

第一题程序错了,a,a[3-i-1]都是地址,怎么能相加,还赋给s呢?

第二题:

当一个逻辑上长于一个字节的整形数据放置在内存中时(比如16位,32位,和64位的整数),计算机设计者需要考虑这些字节的存储顺序。一些体系结构的设计者选择了将字节的逻辑顺序与物理顺序一致,即将逻辑上较低的字节放置在物理上较低的字节上;另外一些设计者则选择了将字节的逻辑顺序与物理顺序相反,即将逻辑上较低的字节放置在物理上较高的字节上。前者被称为“little endian”,比如Intel x86系列;后者则被称为“big endian”,比如Motorola的PowerPC以及Sun Sparc。还有一些平台同时支持两种方案,由开发者决定使用哪一种。

我们一般用的都是Intel系列的处理器,所以,逻辑上的低字节在物理上也靠前放,就此题来说,0x21放在0x43前面,所以程序输出是21,43

第一题:
首先s=s+a[0][0]+a[2][0]=1+5=6
然后s=s+a[0][0]+a[1][0]=6+1+3=10
最后s=s+a[0][0]+a[0][0]=10+1+1=12
输入12

第一个错误太多 不在叙述慢慢改吧
第二个如上所述
ch[0]
0x21
ch[l]
0x43

第二个程序里也有错误
s.d=Ox4321; 应该是s.d=0x4321; 是0x(零x)不是ox(哦x)
printf("%x,%x\n",s.ch[0],s.ch[l]); 里的s.ch[l]不是L应该是一
0x代表16进制数一个16进制=4位2进制数 所以2个就是8位一个字节 所以占一个内存单元 所以4321就被拆分成2部分了