关于c语言的几个题目~~请高手帮忙解答~~

来源:百度知道 编辑:UC知道 时间:2024/06/03 18:05:35
1.
main()
{ union
{ char ch[2];
int d;
}s;
s.d=0x4321;
printf("%x,%x\n",s.ch[0],s.ch[1]);
}

请问为什么输出的结果是21,43??

2.
typedef struct node
{ int data;
struct node *next;
}*NODE;
NODE P;
说是p是指向struct node结构变量的指针,为什么~~typedef定义新的名字不应该是*NODE吗??NODE在没有*的情况下怎么能重新定义类型??

3.
设有定义:int n1=0,n2,*p=&n2,*q=&n1;,请问语句p=q;能不能与语句n2=n1;等价??为什么??

4.
main()
{ int n=0,i;
for(i=1;i<argc;i++) n=n*10+*argv[i]-'0';
printf("%d",n);
}

请问输出的结果为什么是136~~关键是怎么得来的??

5.
若有以下函数的首部 int fun(double x[10],int *n),则用int fun(double *,int *)对此函数进行声明正确吗??为什么??这种针对函数的函数声明的作用是什么??

6.
定义了以下语句:int a[2][3],*p[3];结果判断说语句p=a是个错误的语句~~原因是语句左边p引用不合法??为什么~~单独的P不是表示地址吗??为什么??
7.
int aaa(char *s)
{ char *t=s;
while(*t++);
t--;
return(t-s);
}
说这段程序的作用

1、
int类型的数据占两个机器字,低位在前,高位在后。
int型的数据,在TC环境下占2个字节,在VC环境下占4个字节。
INTEL的处理器,是低位在前,高位在后。其他公司的,有可能是相反的。

2、
typedef定义的时候,在NODE前已经加了*号了,说明NODE已经是指针类型了
typedef定义新的名字,可以是*NODE,也可以是NODE,两者意义不同,前者是指针,后者是结构。

3、
不等价。n2=n1是变量赋值,p=q是指针赋值,它的含意是q也指向了p指向的变量

4、
题目有错,main()应该有参数agrc和argv的。
有参数的main程序的输出结果,与命令行的具体参数有关

5、
都正确。因为只是声明,不是实现,所以可以省略形参。
函数声明的作用是给编译器编译程序,提供依据,防止非法的实现和调用。

6、
如果这样定义:int a[2][3],(*p)[3];那么p=a是合法的。
这里你要区分(*p)[3]和*p[3],前者是数组的指针,后者是指针的数组。
数组名是不能够改变的,比如int a[2],你能这样a=2赋值么?
显然,不行的。哪怕,你把指针int *p,赋值给a,这样a=p也是不行的。

7、
计算出的长度没比实际长度少。也没错

二级C这种垃圾考试没什么意义。
1、int类型的数据占两个机器字,低位在前,高位在后。
2、typedef定义的就是指针,不需要再加*号。
3、p=q是地址赋值,不是变量赋值。
4、该程序与命令行参数有关,输出不是固定的。
5、可以,但是容易引起混乱。指针参数是用于再函数中可以改变外部变量。
6、同3。
7、当然漏掉一次首字符,去掉t--; 。

其他的没看,第7题 应该把while(*t++);
t--;
改成while(*t)(t++);