C 要求澄清类型转换
编辑:好吧,我想我现在明白了: 案例1:C 要求澄清类型转换,c,casting,C,Casting,编辑:好吧,我想我现在明白了: 案例1: #include <stdio.h> #define function(_a) ((_a)*2) int main () { int (*func)(int) = function(0); // function(0) = 0 func(7); ... } #包括 #定义函数(_a)(_a)*2) int main(){ int(*func)(int)=函数(0);//函数(0)=0 func(7); ... } 语法是
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function(0); // function(0) = 0
func(7);
...
}
#包括
#定义函数(_a)(_a)*2)
int main(){
int(*func)(int)=函数(0);//函数(0)=0
func(7);
...
}
语法是可以的,但是,在运行时,main将尝试访问地址NULL,这将导致unix环境中windows中的软件崩溃/分段错误
案例2:
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function;
func(7);
...
}
#包括
#定义函数(_a)(_a)*2)
int main(){
int(*func)(int)=函数;
func(7);
...
}
编译错误,因为“函数”实际上是一个宏,而不是一个实际的函数,所以可以说,指向函数的指针不能指向它
案例3(正确代码):
#包括
int函数(int_a){return((_a)*2);};
int main(){
int(*func)(int)=函数;
func(7);
...
}
这次我做对了吗?
int(*func)(int)=0
表示func
是一个函数指针,即指向函数的指针,因此(*func)
返回一个整数,即语句中的第一个int
,并将整数作为参数,即(int)
。将int(*func)(int)
赋值给0
意味着函数指针被赋值给指向NULLint(*func)(int)=0
表示func
是一个函数指针,即指向函数的指针,因此(*func)
返回一个整数,即语句中的第一个int
,并将整数作为参数,即(int)
。将int(*func)(int)
赋值给0
意味着将函数指针赋值给指向NULL
这一行不是您所认为的
int (*func)(int) = 0;
它是一个变量(称为func),指向一个函数的指针,该函数的签名为intsomename(int)
,您将其设置为0
为了更好地理解这一点:
int myfunction(int a) { return 5;}
这样就行了
int (*func)(int) = myfunction;
这条线不是你想象的那样
int (*func)(int) = 0;
它是一个变量(称为func),指向一个函数的指针,该函数的签名为intsomename(int)
,您将其设置为0
为了更好地理解这一点:
int myfunction(int a) { return 5;}
这样就行了
int (*func)(int) = myfunction;
它是一个初始化为NULL
的函数指针。好吧,但是调用函数时会发生什么,例如,func(7)
?它是一个初始化为NULL
的函数指针。好吧,但是调用函数时会发生什么,例如,func(7)
?同样值得注意的是,在最后一行代码之后,可以使用func(10)调用该函数代码>我明白了,我完全错了,实际上,原始代码是:int(*func)(int)=函数(0)代码>和函数是这样定义的:#定义函数(_a)(_a)*2)
但它仍然没有意义,因为函数(0)
返回NULL<代码>函数(0)
相当于0*2
,即0
。这不是你期望的答案吗?例如,如果int(*func)(int)=function
,其中函数定义为int function(int num){return num*2;}
,并且如果执行(*func)(10)
您应该得到20
@user1965208-在这种情况下,您不能使用#define
来创建指针。同样值得注意的是,在最后一行代码之后,可以使用func(10)调用函数代码>我明白了,我完全错了,实际上,原始代码是:int(*func)(int)=函数(0)代码>和函数是这样定义的:#定义函数(_a)(_a)*2)
但它仍然没有意义,因为函数(0)
返回NULL<代码>函数(0)
相当于0*2
,即0
。这不是你期望的答案吗?例如,如果int(*func)(int)=function
,其中函数定义为int function(int num){return num*2;}
,并且如果执行(*func)(10)
,您应该得到20
@user1965208-在这种情况下,您不能使用\define
来创建指针。感谢您的回复,请看我对第一个答案的评论:)谢谢你的回复,请看我对第一个答案的评论:)