You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何程序会两次打印字符'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:06:15