C语言 的几道题目 求救

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:19:11
1、该程序的运行结果
include <stdio.h>
union un
{
int i;
char c[2];
}
main()
{
union un x;
x.c[0]=10;
x.c[1]=1;
printf("\n%d",x.i);
}

(266)为什么答案解释说x.i=x.c[1]*256+x.c[0]=266,256何来也?

2、以下程序的输出结果
main()
{
union
{ unsigned int n;
unsigned char c;
}ul;
ul.c='A';
printf("%c\n",ul.n);
}
结果是 A 。但是“int n;”与“("%c\n",ul.n)"与”怎么解释。

3、
ain(int argc,char* argv[])
{int n,i=0;
while(argv[1][i]!='\0')
{n=fun();i++;}
printf("%d\n",n*argc);
}
int fun()
{ static int s=0;
s+=1;
return s;
}
(6)但我在TC上运行结果是1926,这个“argc”是什么东东。为什么会有这种结果。

4、
#include <stdio.h>
typedef union
{long i;
int k[5];
char c;
}DATE;
struct date
{
int cat;
DATE cow;
double dog;<

1. x.i根本未初始化,为随机值。

2. 这里引入了一个Union的使用方法。
union区别于结构体的一点,就是union严格按照其中最大数据长度的成员进行字长对齐(assign)。当你对union的一个原子类型成员进行赋值的时候,他将对其他成员一起赋值,冲洗掉你以前对其他成员的操作。

在这里,union中最长的元素是int n,那么联合结构ul将按照32字长对成员进行数据对齐;你对char c进行赋值,那么也就是ui.c = 'A'(0x41)。那么ui.n就是(0x0041),转化到ASCII下面,也就是ui.n = 'A'(高位失效)

但是union还对字符操作进行了限制,当你用整形打印ui.n的时候,他依然是随机值。

3. 仔细看main的头定义
int main(int argc,char* argv[]);
比如你将此文件编译为test.exe,那么在命令提示符下输入
> test 1 2 3 4 5
那么这里的argc就是你这一行的参数个数(6),argv就是包含了参数字符串的数组。(他们是argv={"test", "1", "2", "3", "4", "5"})

这里就很明显了,程序的接过就是计算第二个参数的数据长度和所有参数个数的乘积(1*6=6)

4. 程序结果是52(32+20)。
上面讲到了UNION的特殊性,DATE是被typedef的数据结构,它取了int k[5]为最大字长(4 bytes*5)。
"DATE max;"相当于
union{
long i;
int k[5];
char c;
} max;

5. 这是运算优先级问题,你回去查查吧,可以肯定成员操作符(->)比自