在打印带有函数的数组时遇到麻烦



程序将不打印数组,它只是空白。它可以让我构建没有错误,但有一个警告语句:

warning C4477: 'printf' : format string '%s' requires an argument of type 'char *', but variadic argument 1 has type 'int (__cdecl *)(int)'

我想在程序中使用一个指针,这就是为什么它在里面,因为它是类的章节。

#include "stdafx.h"
#define count 7
int form1(int a);
int form2(int a);
int form3(int a);
int form4(int a);
int form5(int a);
int form6(int a);
int form7(int a);
int main()
{
    //creates a pointer to the functions for the program
    int (*forms[count])(int) = { form1, form2, form3, form4, form5, form6 ,form7 };

    //prints out the array for sizeof data types
    for (unsigned int i = 1;i >= count;i++) {
        printf("%s", forms[i]);
        printf("n");
    }
    return 0;
}
int form1(int a) {
    a = sizeof(char);
    return a;
}
int form2(int a) {
    a = sizeof(short);
    return a;
}
int form3(int a) {
    a = sizeof(int);
    return a;
}
int form4(int a) {
    a = sizeof(long);
    return a;
}
int form5(int a) {
    a= sizeof(long long);
    return a;
}
int form6(int a) {
    a= sizeof(float);
    return a;
}
int form7(int a) {
    a= sizeof(double);
    return a;
}

三件事不对:

  1. printf应该使用%d打印出int,而不是%s%s表示您正在打印char*,正如编译器告诉您的那样。此外,您需要在forms[i](即forms[i]())之后使用括号,以便正确调用它;否则,打印的是指向函数本身的指针,而不是函数调用的结果。注意,我没有在函数调用中包含任何参数。

  2. 传递一个立即被丢弃并返回的参数是完全没有道理的。例如,使用int form1() { return sizeof(char); }而不是int form1(int a) { a = sizeof(char); return a; }。如果这样做,您还需要将*forms的声明更改为int (*forms[count])() = { ... };

  3. 你的for循环应该是unsigned int i = 0; i < count; i++ .

最新更新