简单的c语言程序改错!关于函数指针

来源:百度知道 编辑:UC知道 时间:2024/08/23 22:35:26
//下面代码是课本上一段,程序的功能可以看运行结果
#include<stdio.h>
#include<string.h>
char index(char c,char*s)
{
int i=0;
while(c!=s[i]&&s[i]!='\n')//为何定了个s[i]!='\n',有用吗?能举个例子么
i++;
return(i);//返回的i值,本来是整型,而为何返回时函数定义char
}

main()
{
char s[40],c,pos;
char (*pf)()=index;
printf("输入一个字符串:");
gets(s);
printf("输入一个字符:");
c=getchar();
pos=pf(c,s);
putchar('\n');
puts(s+pos);//最不理解!s为首地址,而pos是字符型,我只见过地址加上数值,为何加上字符型
}

运行结果:
输入abcdefg
d

输出defg

//为何定了个s[i]!='\n',有用吗?能举个例子么

如果不加s[i]!='\n',那么用户输入
abcdefg
h
然后你的程序就崩溃了

//返回的i值,本来是整型,而为何返回时函数定义char
//最不理解!s为首地址,而pos是字符型,我只见过地址加上数值,为何加上字符型

其实,char型和int型基本就是一样的。如果不考虑char只有一个字节,而int可能有两个或四个字节,那么char和int完全相同!
给你几个例子:
char c='a';
int a=97; //字符a的ASCII码值是97
printf("%c\n",c);
printf("%c\n",a);
printf("%c\n",97);
printf("%d\n",c);
输出为:
a
a
a
97

定义函数指针时,少写了函数参数,如下改:
另外,char型的数据结构可以存放-127~128范围的整数.
如: char a='a',或者 char a=97;
其实char a='a'和char a=97是等价的,
输出时可都以用:
printf("%d",a);
或者
printf("%c",a);
可以当整型变量使用;

#include<stdio.h>
#include<string.h>
char index(char c,char*s)
{
int i=0;
while(c!=s[i]&&s[i]!='\n')//为何定了个s[i]!='\n',有