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

char* func_name与char *func_name有何区别?兼询相关函数差异

C语言函数声明风格与指针函数的区别解答

一、char* func_name与char *func_name的写法差异

这两种函数声明在C语言语法层面完全等价,没有任何功能上的区别,仅仅是代码风格的偏好不同:

  • char *func_name的写法更贴合C语言的语法逻辑:*是修饰函数名func_name的,明确表示该函数返回的是指向char类型的指针,把*和函数名放在一起,更能直观体现指针的属性。
  • char* func_name的写法是将char*视为一个整体的“字符指针类型”,风格更偏向现代编程语言的类型表述习惯。

以你提供的代码为例,两个get_next_line函数的声明完全一致,编译器会将它们识别为同一个函数,编译运行结果没有任何差异。

二、返回char指针的函数与指针函数的核心差异

首先明确两个概念的本质:

  1. 返回char指针的函数
    就是你示例中的char *get_next_line(int fd)这类函数,它的本质是一个普通函数,只是返回值的类型为char*(指向字符的指针)。比如示例中函数会根据传入的文件描述符,返回指向读取到的行的指针,或在参数非法时返回NULL。

  2. 指针函数(函数指针)
    这是一种指向函数的指针变量,它的作用是存储某个函数的内存地址,从而可以通过这个指针间接调用函数。比如针对get_next_line这类函数,声明函数指针的写法如下:

// 声明一个函数指针,指向接受int参数、返回char*类型的函数
char *(*func_ptr)(int);
// 将指针指向get_next_line函数
func_ptr = get_next_line;
// 通过指针调用函数
char *line = func_ptr(0);

两者的核心区别:

  • 本质不同:返回char指针的函数是可执行的函数实体,用于完成特定逻辑并返回字符指针;函数指针是指针变量,仅用于存储函数的地址,作为函数的“别名”来间接调用。
  • 语法区别:返回char指针的函数声明为char *func_name(int);函数指针必须用括号包裹*指针名,即char *(*func_ptr)(int)——如果省略括号,char **func_ptr(int)会被解析为“返回指向字符指针的指针”的普通函数,而非函数指针。

内容的提问来源于stack exchange,提问作者user20575697

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:00:58