霆洋衍生何奈:C语言的几个问题

来源:百度文库 编辑:高考问答 时间:2024/04/29 06:28:15
1.main()
{int a[3][4]={99,2,3,4,5,6,7,8,9,10},(*p)[4]=a+2;
printf("%d\n",p[0][0]);}
这个程序答案是输出9,但是我运行了一下,输出是910
2.int fun(char *s)
{int n=0
while(*s){n++;s++;}
return;
}
main()
{char y[]"this_is_an_example.";
printf("%d\n",fun(&y[5]));
} 答案是14
请高手分别就这2个程序详细解释一下!

第一个题里面
a是指向a[0][0]的指针
a+2后就指向了a[2][0]
而a[2][0]=9
所以当(*p)[4]=a+2后
p指向了a[2][0]
所以p[0][0]=a[2][0]=9
至于你运行出910
应该是你哪里写错了
再去试一下吧
不过这种精神值得表扬。。
鼓励一下
=,=
第二个题中
你是抄错了还是什么。。
错了好几个地方
我给你改了一下
int fun(char *s)
{
int n=0 ;
while(*s){n++;s++;}
return n;
}
main()
{
char y[]="this_is_an_example.";
printf("%d\n",fun(&y[5]));
}

fum(&y[5])是取了第二个i的地址当参数
while(*s)表示数组没有遇到\0则循环
所以while(*s){n++;s++;}就是统计从y[5]向后还有多少个字符
返回n即字符数

第一个程序我运行了一下没错啊,就是9!
第二个程序好象不怎么对头!你再好好看一下吧!

对dadalili的回答作点补充。
C语言里用0表示逻辑假,非0表示逻辑真。
字符实际上就是0-255之间的整数,其中0对应的字符是'\0',即字符串结束符。
因此,while(*s)表示数组没有遇到字符串结束符则循环。

这两个程序中的第一个没有错我运行一下的确是9,第二个程序是你抄错了,再return 后漏掉个n.该后运行结果是14。