无法使用函数打印数组

时间:2015-10-13 14:37:16

标签: c function function-pointers

程序不会打印数组,它只是空白。它会让我构建没有错误,但有一个警告声明:

  

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 个答案:

答案 0 :(得分:5)

有三件事是错的:

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

  2. 传递一个立即扔掉并返回的参数绝对没有押韵或理由。例如,使用int form1(int a) { a = sizeof(char); return a; }代替int form1() { return sizeof(char); }如果您这样做,您还需要将*forms的声明更改为int (*forms[count])() = { ... };

  3. 您的for循环应为unsigned int i = 0; i < count; i++