在 C 语言中是否有可能使函数将两种不同类型的变量作为参数?

Is it possible in C to make a function take two different data-types of variables as argument?

提问人:smbhav 提问时间:11/26/2022 最后编辑:marc_ssmbhav 更新时间:8/8/2023 访问量:323

问:

int count_letters(string text, int length);
int count_words(string text);
int count_sentences(string text);

void final(int letters, int words, int sentences);

int main(void)
{
    string text = get_string("Text: \n");
    int length = strlen(text);
   //printf("%i\n",length);

    int letters = count_letters(text, length);

在这里,我需要所有这四个函数中的变量“length”,但所有这些函数都已经有一个字符串类型参数。是否可以在函数中传递不同类型的参数?

基本上,我想知道这是否正确(第 1 行和第 13 行),如果不是,那么我如何在所有这些函数中使用这个长度变量,而不必在每个函数中本地定义它?

C 函数 参数传递

评论

0赞 Jabberwocky 11/26/2022
我不太确定你在这里问什么。您应该编辑并显示一个示例,说明在所有这四个函数中需要变量“length”的含义,但所有这些函数都已经具有字符串类型参数。如果你需要一个参数,你需要自己把它放在那里。喜欢。int lengthcount_wordsint count_words(string text, int length) ...
0赞 smbhav 11/26/2022
上面代码的第一行和最后一行有效吗?
0赞 Jabberwocky 11/26/2022
但是,是的,声明和都是正确的。你的学习材料应该解释这一点。int count_letters(string text, int length);int letters = count_letters(text, length);
1赞 0___________ 11/26/2022
如果字符串引用有效的 C 字符串,则无需传递长度。
1赞 Andreas Wenzel 11/26/2022
您正在使用的数据类型的实际名称是否为实际名称?您是否正在使用 CS50 头文件?stringcs50.h

答:

2赞 0___________ 11/26/2022 #1

C 字符串以 null 字符结尾。您无需将字符串的长度传递给函数。你需要迭代,直到你达到这个角色

例:

int count_letters(string text)  //better to return size_t
{
    int result = 0;
    for(int index = 0; text[index] != '\0'; index++) 
    {
        if(isalpha((unsigned char)text[index]))
        {
            result += 1;
        }    
    }
    return result;
}

评论

0赞 smbhav 11/26/2022
这行得通。好把戏。我不知道。谢谢
0赞 smbhav 11/26/2022
我能问你一些事情吗?这里 - 为什么在没有它的情况下工作时使用 unsigned char .它的重要性是什么?if(isalpha((unsigned char)text[index]))
0赞 Jabberwocky 11/26/2022
有时我真的想知道他们在这些 CS50 课程中教了人们什么......
0赞 smbhav 11/26/2022
我只在第 2 周。
0赞 Andreas Wenzel 11/26/2022
@smbhav:这个C++问题的答案解释了为什么 cast to 是必需的。出于同样的原因,它在 C 中也是必需的,并且与函数 .只有上面的字符代码才需要强制转换,因此低于该数字的字符代码不需要强制转换。unsigned charisdigitisalpha127
1赞 user253751 11/26/2022 #2

当然有可能。你已经做到了:

int count_letters(string text, int length);

count_letters有一个名为 的参数和一个名为 的参数。stringtextintlength

我相信您已经知道一些允许这样做的功能:

     printf("the magic number is %d\n", 42);
//   ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^
// function      const char *           int