c语言程序求解

来源:百度知道 编辑:UC知道 时间:2024/07/04 21:09:08
107. int i;
main ( )
{ int i = 1, j = 2;
fun ( fun (i, &j ), &j );
}
fun ( int a, int *b )
{ static int m = 2;
i += m + a; m = ++( *b );
printf (" %d, %d ", i, m);
return ( m );
}
i是全局变量吗?那么第一个m应该是等于4吧?可是为什么答案是3呢?
第二次fun函数运行的时候,m的值又是多少?那个赋值语句m=2还有效吗?还是等于3?

19. 若在定义语句:int a, b, c,*p = &c; 之后,接着执行以下选项中的语句,则能正确执行的语句是:
A) scanf ("%d", a,b,c); B)scanf ("%d%d%d", a,b,c); C) scanf ("%d", p); D) scanf ("%d", &p);
C和D的区别是什么

62. 以下各语句或语句组中,正确的操作是:??
A) char s[5]="abcde"; B) char *s; gets(s); C) char s[5]; gets (&s); D) char *s ="abcde";
这个怎么选?能逐个解释一下错的原因吗

157. main ( )
{ union { int k; char i[2]; } a, *s = &a ;
s -> i[0] = 0x39; s -> i[1] = 0x38; printf ( " %x \n ", s -> k ) ;
}???
A) 3839 B) 3938 C) 38

107题:
你的main函数中又定义了i,所以把全局变量i给屏蔽了,故全局的i依然是0
如果main函数中是 i=1; 而不是int i=1 那么i就等于4

第二次fun函数运行的时候,m=4,
那个赋值语句m是等于3,这就是static 的作用;如果没有static 就是2

19题: 选 C
指针p本来就是地址,所以不需要加地址符。

62题: 选 D
A 申请的内存不够
B 指针S 没有指向任何内存地址
C 应该是gets (s); 因为S就是数组的首地址,故不需要加地址符。

157题: %x 是高字节地址 ,好像是。。。

107:i是全局变量,第一次运行m等于(*b)+1那就等于2+1,所以答案是3
第二次运行完,m等于3,m=2有效,因为m是局部变量
19:正确答案B C中p是一个指针变量 D中p被引用
62:A少了一个花括号{"abcde"}B应该是gets(&s); 因为s是指针型变量
C中应该去掉&
157:don't know

楼主能不能给我分啊,我急需