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 x=y;
这里的y
是一个指针,您试图将它分配给x
,这是一个int
您还将一个literal100
传递给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
的地址。