请教C语言指针类题目

来源:百度知道 编辑:UC知道 时间:2024/05/28 08:32:53
下面三个题目运行的结果是什么? 希望有一定的解答说明
1: void fun(int *n)
{ while( (*n)-- );
printf("%d",++(*n));
}
main()
{
int a=100;
fun(&a);

}
2: main()
{char *p="abcdefgh",*r;
long *q;
q=(long *)p;
q++;
r=(char *)q;
printf("%s",r);
}
3; #include<studio.h>
#include<string.h>
main()
{ char *p1,*p2,str[50]="abc";
p1="abc";p2="abc";
strcpy(str+1;strcat(p1,p2));
printf("%s",str);
}

void fun(int *n)
{ while( (*n)-- );
printf("%d",++(*n));
}
main()
{
int a=100;
fun(&a);

}
输出位0.因为是参数是指针,所以传参得有取地址符号。fun函数里面的while由于后面加分号,所以while是空语句。挡执行到*n--的表达式位0的时候停止,执行玩while的时候*n等于-1了。++(*n)的表达式值位0.所以输出0。

第二道输出efgh.
因为现在的一般电脑char占一个字节,long占四个字节。所以首先强制强char转换位long指针。然后long指针+1就是+了四个字节,所以越过了char的四个字符。所以输出位efgh。
第三题的结果是aabcabc
你的程序还有一些细节上错误。自己去改吧,我讲原理。
首先strcat把p1和p2连接起来成为abcabc,然后
strcpy是从字符串str【1】开始的,所以str【0】还是照样是a。所以结果是aabcabc

第一题:输出0.
调用fun(&a); 的时候,把a的地址传到函数fun(),在函数fun()中,执行while((*n)--);注意后边有个冒号,相当于
while(*n)
{(*n)--;}
当(*n)--=0时退出循环,但是此时,*n=-1,最后输出",++(*n)为0.
第二题:输出efgh
char占一个字节,long占四个字节。所以首先强制转换为long指针。然后long指针+1就是加了四个字节,所以越过了char的四个字符。所以输出efgh。
第三题:aabcabc
strcpy(str+1;strcat(p1,p2));
使用不对,strcpy()括号中间不用冒号

第一题:输出1.
第二题:输出efgh
三题错误!!!!

1;*n=0退出循环 但还要 *n-- 此后*n=-1;
2:q=(long *)