程序不会打印数组,它只是空白。它会让我构建没有错误,但有一个警告声明:
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;
}
答案 0 :(得分:5)
有三件事是错的:
printf
应使用%d
打印int
,而不是%s
。 %s
表示您正在打印char*
,正如编译器告诉您的那样。此外,您需要在forms[i]
之后使用括号(即forms[i]()
)才能正确调用它;否则你打印指向函数本身的指针,而不是函数调用的结果。请注意,我在函数调用中没有包含任何参数。这是因为下面的第2点。
传递一个立即扔掉并返回的参数绝对没有押韵或理由。例如,使用int form1(int a) { a = sizeof(char); return a; }
代替int form1() { return sizeof(char); }
如果您这样做,您还需要将*forms
的声明更改为int (*forms[count])() = { ... };
您的for
循环应为unsigned int i = 0; i < count; i++
。