传递参数使得指针来自整数而没有强制转换

时间:2014-08-30 16:45:20

标签: c

我已经阅读了Stack Overflow上的几个类似问题,但在这种情况下,我找不到能够帮助我理解此警告的问题。我在尝试学习C的第一周就是这样,如果我因为缺乏理解而在Stack Overflow的其他地方错过了一个明显的答案,那么道歉。

我收到以下警告并注意:

 warning: passing argument 2 of ‘CheckIfIn’ makes pointer from integer without a cast [enabled by default]
 if(CheckIfIn(letter, *Vowels) ){
 ^

 note: expected ‘char *’ but argument is of type ‘char’
 int CheckIfIn(char ch, char *checkstring) {

尝试编译此代码时:

#include <stdio.h>
#include <string.h>
#define CharSize 1 // in case running on other systems

int CheckIfIn(char ch, char *checkstring) {
    int string_len = sizeof(*checkstring) / CharSize;
    int a = 0;

    for(a = 0; a < string_len && checkstring[a] != '\0'; a++ ){

        if (ch == checkstring[a]) {
            return 1;
        }
    }
    return 0;
}


// test function    
int main(int argc, char *argv[]){
    char  letter = 'a';
    char *Vowels = "aeiou";     

    if(CheckIfIn(letter, *Vowels) ){
        printf("this is a vowel.\n");
    }

    return 0;
}

2 个答案:

答案 0 :(得分:6)

Vowelschar**Vowels只是char,&#39; a&#39;。 char被自动提升为整数,编译器允许将其隐式转换为指针。但是指针值不是Vowels,它的地址将等于字符&#39;,0x61的整数编码几乎普遍。

只需将Vowels传递给您的函数。

答案 1 :(得分:0)

在您的情况下,类型转换是从charinteger指针。在某些情况下,该函数将void指针作为第二个参数来容纳所有数据类型。 在这种情况下,您需要将第二个参数转换为(void *)

这将是大多数编写良好的模块化函数中的函数声明:

int CheckIfIn(char ch, void *checkstring);

如果元音不是字符指针,则需要将参数作为空指针传递

 if(CheckIfIn(letter, (void *)Vowels) ){
        printf("this is a vowel.\n");
    }