程序将不打印数组,它只是空白。它可以让我构建没有错误,但有一个警告语句:
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;
}
三件事不对:
-
printf
应该使用%d
打印出int
,而不是%s
。%s
表示您正在打印char*
,正如编译器告诉您的那样。此外,您需要在forms[i]
(即forms[i]()
)之后使用括号,以便正确调用它;否则,打印的是指向函数本身的指针,而不是函数调用的结果。注意,我没有在函数调用中包含任何参数。 -
传递一个立即被丢弃并返回的参数是完全没有道理的。例如,使用
int form1() { return sizeof(char); }
而不是int form1(int a) { a = sizeof(char); return a; }
。如果这样做,您还需要将*forms
的声明更改为int (*forms[count])() = { ... };
-
你的
for
循环应该是unsigned int i = 0; i < count; i++
.