我知道这是一个初学者的问题,但是我不明白它是如何工作的,我发现在每个来源上我都看到了一种不同的方法来做同样的事情,而且我不理解这两种构建函数的方法之间的区别在c中返回一个字符串。
发生什么情况:
我在返回类型后面写星号吗?
char* my_function(){...}
如果在函数名称前写星号怎么办?
char *my_function(){...}
两者之间的星号是什么?
char * my_function(){...}
2个星号是什么意思?
char **my_function(){...}
是的,下一个代码将编译:
char* * **my_function(){...}
或者...他们都是同一个人吗?
答案 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)
只要星号位于char
和my_function
之间,间距就没有任何区别。
在所有情况下,它们都是函数返回类型的一部分。
char*
表示返回类型是指向char
的指针。
char**
表示返回类型是指向char
的指针。
以此类推。
答案 2 :(得分:4)
在声明中,T *p
,T* p
和T * 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*
的指针。
间距无关紧要。
我建议您更深入地了解指针,它们是什么以及如何使用它们。