【问题标题】:Having trouble printing an array with functions打印带有函数的数组时遇到问题
【发布时间】:2015-10-13 14:37:15
【问题描述】:

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

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;
}

【问题讨论】:

  • for (unsigned int i = 1;i >= count;i++) count = 7and i = 1 小于7 所以你永远不会进入forloop

标签: c function function-pointers


【解决方案1】:

错了三处:

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

  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++

【讨论】:

  • 感谢您的帮助。完美运行...谢谢
猜你喜欢
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多