QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1622|回复: 16

一个关于函数指针数组的问题!!!???

[复制链接]
发表于 2005-2-16 23:48:15 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <ctype.h>
main()
{
int strcmp();
int numcmp();
char s1[80],s2[80];
gets(s1);
gets(s2);
if(isalpha(*s1))
check(s1,s2,strcmp);
else
check(s1,s2,numcmp);
}

check(a,b,cmp)
char *a,*b;
int (*cmp)();
{
printf("testing for equality\n");
if(!(*cmp)(a,b)  printf("equal");
else  printf("not equal");
)
numcmp(a,b)
char *a,*b;
{
if(atoi(a)==atoi(b)) return 0;
else return 1;
}
_________________________________________________________________________
由于上面的程序是Turbo c写的我又没有该编译程序,就只能凭空着讨个指教!问题问的再菜也请耐心教我!!!
以上程序中有一库函数isalpha(),我查了了一下相关资料:
调用方式:int isalpha(int ch)
说明:isalpha()函数的原型在ctype.h中。如果ch是字母表中的字母(大写或小写),则返回非零;否则返回零。
可见其中参数是int型,而以上程序中*s1是什么东西?不明白!按照资料中的函数此处不是应该用循环对数组s1中的元素一个个的检查吗?怎么用isalpha(*s1)呢?*sl是什么???
 楼主| 发表于 2005-2-16 23:50:56 | 显示全部楼层
难道该程序只检查数组s1的第一个元素?!   
*s1是指数组s1的第一个元素吗???
回复

使用道具 举报

发表于 2005-2-17 09:06:14 | 显示全部楼层
s1实际上是一个指针,*s1是其指向的对象。这里是一个char对象,即数组的第一个元素。
既然传递的参数是指针,所有的元素都可访问到,比较所有元素。
回复

使用道具 举报

 楼主| 发表于 2005-2-17 10:59:49 | 显示全部楼层
传递的参数是*s1呀,它不是指针呀!它应该是指针s1指定的对象,而数组名应该指定的是数组的起始地址,所以它不应该是s1的第一个元素吗?而参数就是它,不就是只检查第一个元素吗???怎么是所有元素呢???
回复

使用道具 举报

发表于 2005-2-17 11:40:05 | 显示全部楼层
if(isalpha(*s1))   //这里是判断第一个元素的类型,传入的是值
check(s1,s2,strcmp); //传入指针进行字符串比较
else
check(s1,s2,numcmp); //传入指针进行数字转换再比较数字
}
回复

使用道具 举报

发表于 2005-2-18 16:55:02 | 显示全部楼层

wenhao32

这段代码你有没有编译过呢,我在VC下编译,调整了也通不过,函数指针的调用无法通过。
回复

使用道具 举报

发表于 2005-2-18 18:34:01 | 显示全部楼层
显然这里的字符数组s1和s2是有约定的:即,如果第一个字符是数字,那么后面都是数字,如果第一个是字母,后面都是字母。这个函数检查的是第一个字符

       isalpha()
              checks for an alphabetic character; in the standard "C"  locale,
              it  is  equivalent  to  (isupper(c)  ||  islower(c)).   In  some
              locales, there may be additional characters for which  isalpha()
              is true--letters which are neither upper case nor lower case.
回复

使用道具 举报

发表于 2005-2-18 18:35:03 | 显示全部楼层
你看这个程序的写法太老了,如果是书上的,还是不要看这本书了
回复

使用道具 举报

 楼主| 发表于 2005-2-18 19:55:11 | 显示全部楼层
你怎么就觉得这个程序写法老了呢?是因为它的形参的类型说明没有放在小括号里,还是其它?能说说新的写法有什么特点吗?
回复

使用道具 举报

发表于 2005-2-18 22:27:00 | 显示全部楼层
看不懂楼主的程序。要说老,我10多年前也没见过这样的c程序
回复

使用道具 举报

 楼主| 发表于 2005-2-19 08:08:48 | 显示全部楼层
这是一本Turbo c的资料上摘录的!!!
回复

使用道具 举报

发表于 2005-2-19 09:18:49 | 显示全部楼层
这是比较老的C写法,linux的前身minix代码就是这种写法,一般的C编译器应该支持!
回复

使用道具 举报

发表于 2005-2-19 12:06:20 | 显示全部楼层
确实比较老的C写法,现在很少这样写的了.
原来可以:
int numcmp(a,b)
char *a,*b;
{
...
}

现在:
int numcmp(char *a,char *b)
{
...
}
回复

使用道具 举报

 楼主| 发表于 2005-2-19 12:41:35 | 显示全部楼层
看来程序风格也有时髦之风!!!
回复

使用道具 举报

发表于 2005-2-19 13:20:51 | 显示全部楼层
没有意义 的写法阿
累人阿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 15:24 , Processed in 0.068569 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表