[英]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*)'
如何解决上述错误,以及以下函数形式及其适当的调用语法之间的区别是什么,
中的参数类型
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.