[来自K& R Book的节目]
这是计算单词的程序。我想问一下为什么这个程序已经通过word
作为第12行中{1}}的第一个参数,而不是getword
。 *word
将获取数组第一个元素的地址。虽然Word
会获得价值。因此,我们不应该通过*word
而不是*word
。我想我问的是错误的问题,因为word
应该返回getword
,如果它不是第一个位置的地址,则它们不会返回int
。我仍然怀疑它。提前谢谢。
int
getword的代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAXWORD 100
int getword(char *, int);
int binsearch(char *, struct key*, int);
/* count C keywords */
main()
{
int n;
char word[MAXWORD];
while (getword(word, MAXWORD) != EOF) <<<<<<<-------HERE------->>>>>>>
if (isalpha(word[O]))
if ((n = binsearch(word, keytab, NKEYS)) >= 0)
keytab[n].count++;
for (n = 0; n < NKEYS; n++)
if (keytab[n].count > 0)
printf( "%4d %s\n", keytab[n].count, keytab[n].word);
return 0;
}
答案 0 :(得分:2)
在表达式中使用char
数组时,它会衰减为char*
。将它传递给函数就是这种用法的一个例子。
由于被调用的函数getword
需要char*
作为参数,因此使用声明为char
数组的变量是合适的。
宣布:
char word[MAXWORD];
*word
评估为char
,特别是数组的第一个字符,而不是char*
。