读几道程序,帮忙解释下

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:23:08
1.#include<stdio.h>
Main()
{
Char str[]=”ABCDE”,*p;
P=str;
While(*p!=’\0’)p++;
Printf(“%d\n”,p-str);}
答案是5, 我知道P=5,但是,为什么str=0?
2.#include<stdio.h>
Char *strchr(char *str,char ch)
{
While(*str!=ch) str++;
Return(str);}
Void main()
{char *strchr();
Char*pt,ch=’B’,line[]=”Talk to Bill”;
Pt=strchr(line,ch);
Printf(“%s\n”,line);
Printf(“%d %c\n”,pt-line,ch);}
答案是:输出为:Talk to Bill和9 B
我看不懂第二个答案
3.#include<stdio.h>
Void sub1(char a,char*b){char c;c=a,a=*b,*b=c;}
Void sub2(char *a,char*b){char c;c=*a,*a=*b,*b=c;}
Void main()
{ char a,b;
a=’A’;b=’B’;sub1(a,&b);putchar(a);putchar(b);putchar(‘ ‘);
a=’C’;b=’D’;sub2(&a,&b);putchar(a);putchar(b);putchar(‘ ‘);
}
答案是AA DC
我看不懂这个程序

请尽量详细的解释下程序,我礼拜一要考试啦~~~帮个忙
我会在追加50~80分的

1.数组名str就是数组str[]的首地址
p一开始存放的是指向str[]首地址的指针
While(*p!=’\0’)p++; p自增直到str结束,因为字符串为"ABCDE"5位
所以p++运行5次,即 p=p+5=str+5;
而str等于str[]数组的首地址.所以p-str=5.
2.函数Char *strchr(char *str,char ch) 返回值为:指向数组str[]中与ch相等位置的指针.
Pt=strchr(line,ch)返回值就是字符B在str[]中的位置
line是line[]的首地址
所以pt-line=9,因为空格也算一个字符,你算下就知道了
3.Void sub1(char a,char*b){char c;c=a,a=*b,*b=c;}
//函数sub1(char a,char *b)中,因为char a定义的a只是一个局部变量,局部变量只在定义他的地方有效,在这里就是在sub1函数中有效,离开了sub1,a效果就消失了,它作用不到main里面的a;而指针变量就不同了,它利用的是地址,象sub1中的b是一个地址,在函数sub1中是直接对变量b所在内存值进行更改,所以更改可以传回到main()

Void sub2(char *a,char*b){char c;c=*a,*a=*b,*b=c;}
//这里跟上面一个道理,我就不复述了

Void main()
{ char a,b;
a=’A’;b=’B’;sub1(a,&b);putchar(a);putchar(b);putchar(‘ ‘);

// sub1(a,&b)中的a为局部变量回不来的,改变的只有b,*b=a,结果是a='A',b=a='A'
a=’C’;b=’D’;sub2(&a,&b);putchar(a);putchar(b);putchar(‘ ‘);
//sub2(&a,&b)结果为a=b='D' b=a='C'