繁体   English   中英

指针返回类型的函数

[英]Function with pointer return type

我试图了解函数的指针返回类型。 下面的示例产生类型转换错误。

#include <iostream>
using namespace std;

int* abc(int* y)
{
    int x=y;
    int *z = &x;
    x++;
    return z;
}

int main()
{
  int *a = abc(100);
  int b = *a;
  cout << a <<endl;
  cout << b <<endl;
  return 0;
}

错误消息是:

In function 'int* abc(int*)': 6:11: error: invalid conversion from 'int*' to 'int' [-fpermissive]  
In function 'int main()': 14:19: error: invalid conversion from 'int' to 'int*' [-fpermissive] 
4:6: note: initializing argument 1 of 'int* abc(int*)'

如何解决上述错误,以及以下函数形式及其适当的调用语法之间的区别是什么,

  1. int *函数()
  2. int * function()
  3. int * function()

中的参数类型

int* abc(int* y)

int* 当您调用该函数时,

int *a = abc(100);

您通过了一个int 100 它不是指向int的指针。

您可以使用以下方法解决问题:

选项1

更改参数类型。

int* abc(int y) { ... }

选项2

更改调用函数的方式。

int x = 100;
int *a = abc(&x);

如果您遵循此选项,

线

int x=y;

需要修改。 y类型是int* ,而不是int 您必须将行更改为:

int x=*y;

问题

您正在从函数中返回局部变量的地址。 在调用函数中取消引用该地址是未定义的行为。

当您从函数返回地址并且调用函数取消引用该地址时,该地址在调用函数中必须有效。 一种方法是使用malloc从堆分配内存。

int* abc(int* y)
{
    int* x = malloc(sizeof(int));
    *x = (*y + 1);
    return x;
}

执行此操作时,您必须记住在调用函数中进行free呼叫。

int x = 100;
int *a = abc(&x);

// Use a

// Deallocate memory
free(a);

问题不在于您的退货类型。 您的问题在这条线上:

int x=y;

这里y是一个指针,您正试图将其分配给x ,它是一个int

您还将传递文字100 ,它是abc函数的一个int ,该函数以指针作为参数。

最后,您提供的3个函数的类型之间没有区别。 在这种情况下,空白不重要。

这两个函数中的前两个语句都不正确。 main调用abc ,100不是指针,并且盲目地将y赋给x将不起作用,因为前者是int ,后者是int 指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM