C指针运算符:附加到函数还是数据类型?

问题描述 投票:0回答:1

[经过多年对Linux的沉迷,并对底层计算机设计和编程非常感兴趣(但是没有空余时间),我终于开始了学习C的旅程。我正在通过B Kernighan和D Ritchie的C编程语言进行工作(v2)书,以及通过exercism.io的C语言学习。

两者的首要任务都是典型的Hello World程序。在K&R中,任务集是使用stdio.h库到print

“ Hello World”。一切都很好。在执行版本中,任务集为return“ Hello,World!”。教程提供的hello_world.c文件包含要完成的框架代码。它(被我截断并完成)看起来像这样:

#include <stddef.h> const char *hello(void) { return "Hello, World!"; }

基于到目前为止我在C上阅读的所有内容,返回字符串并不是真正的标准,但是也可以。经过一番大惊小怪和一个分段错误(核心已转储)(我试图返回该函数本身:return hello();,没有bueno),我通过了测试。

我了解到*字符是pointer operator

,它允许函数返回一个指向字符数组的内存地址的指针(我认为),这很酷。因此,使指针运算符在function name上标对我来说很有意义。但是,在大多数问答网站和教程网站中,指针操作符显示为数据声明 char的上标。 This链接特别显示了用于放置指针运算符的三个可行选项,并指出它们都是等效的。

当我开始写这个问题时,我认为将指针运算符附加到函数名称上最有意义-那是字符数组在内存中的位置,对吗?进一步思考,应该将指针运算符附加到数据声明char,因为实际上它是函数的输出

,即堆上data的地址,即返回,而不是函数本身(我认为是在堆栈上)。

我的问题:指针操作符的三个放置选项之间是否有区别?

如果是,它们是什么?如果没有,什么是最佳做法?

经过多年对Linux的沉迷,并对底层计算机设计和编程非常感兴趣(但没有空闲时间),我终于开始了学习C的旅程。我正在工作...

c pointers operators return-value heap-memory
1个回答
0
投票
const char* myName()
const char * myName()
const char *myName()
© www.soinside.com 2019 - 2024. All rights reserved.