在C函数构建中什么星号位置意味着什么?

时间:2019-03-08 13:06:47

标签: c function pointers

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

发生什么情况:

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

char* my_function(){...}

如果在函数名称前写星号怎么办?

char *my_function(){...}

两者之间的星号是什么?

char * my_function(){...}

2个星号是什么意思?

char **my_function(){...}

是的,下一个代码将编译:

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

或者...他们都是同一个人吗?

4 个答案:

答案 0 :(得分:7)

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的函数。与上面不同-返回类型不同。

答案 1 :(得分:5)

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

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

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

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

以此类推。

答案 2 :(得分:4)

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

T **p声明p为指向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

答案 3 :(得分:2)

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

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

间距无关紧要。

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