【问题标题】:What asterisk position means in C functions building?星号位置在 C 函数构建中意味着什么?
【发布时间】:2019-03-08 13:06:47
【问题描述】:

我知道这是一个初学者的问题,但我不明白它是如何工作的,在我发现的每个来源上,我看到了不同的方法来做同样的事情,我不明白这些构建函数的方法之间的区别在 c 中返回一个字符串。

什么时候发生:

我在返回类型后面写星号?

char* my_function(){...}

如果在函数名前加星号呢?

char *my_function(){...}

两者之间的星号是什么?

char * my_function(){...}

2 星号是什么意思?

char **my_function(){...}

是的,下一个代码编译:

char* * **my_function(){...}

或者……它们都是一样的吗?

【问题讨论】:

  • 空间在 C 中(大部分)是不相关的。char*foo;char *foo;char* foo;char * foo; 都意味着 100% 绝对相同。有些人偏爱一种或另一种,也许您的编码位置有使用指南;简而言之:除非有理由使用另一种风格,否则请使用您最喜欢的风格。

标签: c function pointers


【解决方案1】:

char* my_function(){...} 定义了一个返回 pointer to char 的函数。

char *my_function(){...} 定义了一个返回 pointer to char 的函数。同上,风格不同。

char * my_function(){...} 定义了一个返回pointer to char 的函数。同上,风格不同。

2 星号是什么意思? --> 指向指针的指针。

char **my_function(){...} 定义了一个返回pointer to pointer to char 的函数。与上面不同 - 不同的返回类型。

char* * **my_function()(){...} 定义了一个返回pointer to pointer to pointer to pointer to char 的函数。与上面不同 - 不同的返回类型。

【讨论】:

  • 不赞成这个是不礼貌的。很好的努力;-)
  • @Bathsheba 真正的英雄努力是C gibberish ↔ English:一个优秀的 C 资源。
  • 我的妻子,作为一名音乐家,当有人将她的演奏质量归咎于小提琴时,会非常沮丧。重要的是你如何使用工具!
  • @Bathsheba 好的,我对工具 C 胡言乱语 ↔ 英语Stradivarius author 表示敬意。;-)
  • 我喜欢这个答案,该网站将帮助我了解我的功能,谢谢!
【解决方案2】:

只要星号位于charmy_function 之间,间距就没有任何区别。

在所有情况下,它们都是函数返回类型的一部分。

char* 表示返回类型是指向char 的指针。

char** 表示返回类型是指向char 的指针。

等等。

【讨论】:

    【解决方案3】:

    在声明中,T *pT* pT * p 都被解析为 T (*p) - * 是声明符的一部分,而不是类型说明符。所以前三个函数声明都声明my_function返回一个指向char的指针。

    T **pp 声明为指向T 的指针。是的,多重间接是可能的,你可以有指向指针的指针,指向指针的指针等等。

    基本规则:

    T *p;        // p is a pointer to T
    T *p[N];     // p is an array of pointer to T
    T (*p)[N];   // p is a pointer to an array of T
    T *f();      // f is a function returning a pointer to T
    T (*f)();    // f is a pointer to a function returning T
    T const *p;  // p points to a const T
    const T *p;  // same as above
    T * const p; // p is a const pointer to T
    

    【讨论】:

      【解决方案4】:

      星号表示pointers,如果你想用 C 语言编程,它们是最重要的概念之一。

      char* 是指向 char 的指针,char** 是指向 char* 的指针。

      间距无关紧要。

      我建议您更深入地了解指针,它们是什么以及如何使用它们。

      【讨论】:

      • “在内部它们是相同的东西(长指针)” - 破坏了答案。你不知道。
      • 不是所有指针都存储为 32/64 位整数吗?可能在那里误用了一些词,但我很确定指针类型是可以互换的(你可以将 int* 转换为 char*,尽管这可能有点愚蠢并且会出错)正是因为这个原因。
      • 不一定。这确实很常见,但 C 标准没有具体说明。例如,在某些系统上,sizeof(char*) 可能与 sizeof(double*) 不同。请注意,当前的英特尔芯片在底层使用 48 位指针。
      • 对,但是所有指针(不是它们指向的内存)的大小都相同,对吧?或者是否存在 int* 是 64 位而 char* 是 48 位的特殊情况? 编辑:哦,好的,看到你的编辑了。我不知道,谢谢你的信息\o。
      • @GBrandt:根据平台的不同,指针甚至可能不是标量值,而是类似于页码和偏移量的东西。唯一的要求是char *void * 具有相同的表示,所有struct 类型指针具有相同的表示,所有union 指针具有相同的表示,并且指向有符号类型的指针具有与指针相同的表示对应的无符号类型。是的,在 x86 上它们都是一样的,但是有一些奇怪的架构。
      猜你喜欢
      • 2010-09-14
      • 2010-11-07
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2013-06-05
      相关资源
      最近更新 更多