指向c中函数的指针?
我正在学习c(在ANSI c->第五版中编程)并面临以下问题: 我正在用指向函数的指针实现一个程序指向c中函数的指针?,c,function-pointers,C,Function Pointers,我正在学习c(在ANSI c->第五版中编程)并面临以下问题: 我正在用指向函数的指针实现一个程序 #include<stdio.h> //void swap (int *a, int *b); //function declaration int main() { int m = 25; int n = 100; printf("m is %d, n is %d\n", m, n); swap(&m, &
#include<stdio.h>
//void swap (int *a, int *b); //function declaration
int main()
{
int m = 25;
int n = 100;
printf("m is %d, n is %d\n", m, n);
swap(&m, &n); //calling a function
printf("m is %d, n is %d\n", m, n);
return 0;
}
void swap (int *a, int *b) //function implementation
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
问题是为什么不允许在上述程序中使用此选项
void swap (int, int); //function declaration
并给出错误
错误:
“交换”的冲突类型
void swap(int*a,int*b)//函数实现
但书中的例子是允许的
此处main()之前的函数签名称为函数签名,该签名应与函数声明匹配
下面
但同样的函数签名也可以写成
void swap (int *, int *);
而不是
void swap (int , int ); //This will result in type mismatch
我想这就是你要问的
注意:转发声明在这里很重要,它允许您先声明,然后再定义,这有助于保持代码可读性。函数必须在源文件中使用之前声明。注释
swap
的声明时,函数的定义直到main()
之后。在这种情况下,编译器所做的是隐式地为您定义swap
。(这需要一点C的历史,但是当对象类型未定义时,任何对象的类型都默认为int
)在您的例子中,编译器提供了int-swap(int*a,int*b)
的默认声明,这与您稍后对无效交换(int*a,int*b)的定义相冲突
--这就是您收到警告的原因。对于第二个问题,int
是与int*
(指针指向-int
)不同的类型,因此您对交换
函数的两个声明完全不兼容。请不要将文本添加为图片。它们不是艺术品。简单地将纯文本复制粘贴到问题中是最好的。
void swap (int *a, int *b){
...
}
void swap (int *, int *);
void swap (int , int ); //This will result in type mismatch