C++ 具有指针返回类型的函数

C++ 具有指针返回类型的函数,c++,pointers,C++,Pointers,我试图理解函数中的指针返回类型。 下面的示例生成类型转换错误 #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 <&

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

#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;
}
如何解决上述错误,以及以下函数形式与相应调用语法之间的区别

  • int*函数()
  • int*函数()
  • int*函数()

  • 问题不在于您的退货类型。您的问题在这一行:

    int x=y;
    
    这里的
    y
    是一个指针,您试图将它分配给
    x
    ,这是一个
    int

    您还将一个literal
    100
    传递给
    abc
    函数,该函数将指针作为参数


    最后,您给出的3个函数的类型之间没有区别。在这种情况下,空格是无关紧要的。

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

    参数类型为

    int* abc(int* y)
    
    int*
    。调用函数时

    int *a = abc(100);
    
    您正在传递
    100
    ,一个
    int
    。它不是指向
    int
    的指针

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

    选项1

    更改参数类型

    int* abc(int y) { ... }
    
    选项2

    更改调用函数的方式

    int x = 100;
    int *a = abc(&x);
    
    int x = 100;
    int *a = abc(&x);
    
    // Use a
    
    // Deallocate memory
    free(a);
    
    如果你遵循这个选项

    线路

    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);
    
    int x = 100;
    int *a = abc(&x);
    
    // Use a
    
    // Deallocate memory
    free(a);
    

    abc将指针作为输入,您正在传递一个整数常量(100)
    int*a=abc(100)是错误的。您不能使用
    100
    的地址。