为何程序会两次打印字符'g'?求C语言代码解析
C语言程序解析:函数指针的使用与执行逻辑
首先明确:你的程序实际会两次打印'g',message = print;这行代码并不会触发函数调用,也就不会打印'g'——你可能误解了这行代码的作用。下面逐行拆解逻辑:
1. 函数定义部分
void print(void) { printf("g"); }
这是一个无参数、无返回值的函数,功能很简单:调用printf打印字符'g'。
2. main函数内的代码解析
void(*message)(void);:声明了一个函数指针message,它指向的函数必须是无参数、无返回值的类型(和print函数的类型完全匹配)。print();:直接调用print函数,执行printf("g"),这是第一次打印'g'。message = print;:这是给函数指针赋值,把print函数的地址赋值给message。注意:这里只是赋值操作,没有调用函数,所以不会产生任何输出。你觉得这里打印了'g',应该是混淆了赋值和函数调用的语法——函数调用必须带括号(),比如print()才是调用。(*message)();:通过函数指针调用它指向的函数。*message表示取出指针指向的函数,加上()就是执行这个函数,也就是再次调用print,这是第二次打印'g'。
补充:函数指针的简化写法
在C语言里,函数指针调用时可以省略*,所以(*message)();和message();是完全等价的,两种写法都能正确调用函数。
内容的提问来源于stack exchange,提问作者Rupinder Singh
相关产品推荐
相关产品推荐

