这两种函数声明有什么区别?

时间:2014-11-06 11:55:07

标签: c data-structures

我正在读一本关于数据结构的书。

我在练习中看到了这样的代码,

这是结构声明。

typedef struct node
{
    int data;
    struct node *next;
}node;

函数声明,它将是树的头部..

node * create (int n);  // please explain this 

create是一个函数

但我们可以写这个吗?

int create (int n);

使用哪一个以及前一个功能声明的优点是什么?

3 个答案:

答案 0 :(得分:2)

node * create (int n);

函数为create,它将接受一个int参数[n]并返回指向node的指针。

int create (int n);

功能为create,会接受一个int参数[n]并返回int

在您的情况下,node是结构的typedef,显然不是int。所以,你不能用后者替换替换第一个函数原型。他们都有不同的回归类型。因此,advantage的比较毫无意义。

Which one to use - 取决于您的需要。

  1. 如果你希望你的函数返回一个指针[可能是一个指向新分配节点的指针,(在成功的情况下,或者在失败情况下为NULL],你需要使用node * create (int n);稍后您可以在调用者函数中使用指向新分配节点的指针。
  2. 如果您希望自己的功能仅返回 成功或失败指示[可能为1和0],那么您可以使用int create (int n);

答案 1 :(得分:0)

node * create (int n);

此函数将n作为参数,并返回类型为node *的指针。这里node是一个如上定义的结构,这个函数返回一个指向这个结构的指针 您不应该使用int作为此函数的返回类型,因为它返回的是指针,而不是值。

答案 2 :(得分:0)

  • C允许从函数返回指针!

为此,您可以这样声明..

int * myFunction(int N)
{. . .}

表示它将整数N作为参数并返回类型为int的指针。

注意:

  

要记住的是,返回地址并不是一个好主意   一个局部变量到函数外部所以你必须这样做   将局部变量定义为静态变量。

喜欢,

 int * myFunction(int N) {
 static int M[10]
 ....
 return M;
 }

来到你的问题......

node * create (int n);

表示函数create将采用整数参数n,它将返回指向node的指针。

所以使用,

  • node * create (int n);返回一个指针
  • int create (int n);返回一个整数!!

希望它有所帮助!!