1

假设我们有一个返回数组的函数。

int *theFunction()
{
int a[]={1,2,3,4,5};
return a;
}

我想将函数的结果存储在指针中。

int *a=theFunction();

我如何打印数组,甚至可能吗?数组的长度未知,有没有办法找到它?

4

5 回答 5

4

不。

您需要使用您知道不会出现的值来描述数组,或者将指针传递给将使用大小填充它的函数。

但是您还返回了指向堆栈上数据的指针;那也行不通。

于 2012-11-03T18:36:09.603 回答
3

首先,永远不要返回指向局部变量的指针。在堆上分配该数组。

至于返回数组的大小,您可以让函数返回一个包含指针和数组大小的结构。

另一种方法是让调用者传递对被调用者修改的大小变量的引用。

于 2012-11-03T18:40:29.137 回答
2

a是一个局部变量,你不能在theFunction函数之外访问它的值。

无论如何,要打印一个没有大小的数组,您必须添加一个分隔符(例如,一个特定的值)。

于 2012-11-03T18:35:21.093 回答
2

未知array时无法打印size


您可以通过以下方式解决此问题

1>提供一个标记值,即表示数组结尾的值。那么让我们考虑-1成为哨兵

int a[]={1,2,3,4,5,-1};
                    ^
                    |->-1 would denote the end of array

但是,如果您的价值之一似乎是,则此解决方案将失败-1

或者

2>使用struct来表示大小和数组内容

struct list
{
int *values;//the array of values
int size;//size of the values array
}

也不要返回指向具有本地范围的值的指针..即在您的情况下,本地值是a..一旦您退出方法,a就会被破坏..a在方法返回后进一步访问它是错误的

于 2012-11-03T19:00:26.880 回答
1

将数组的长度也作为输出参数返回有多难?如果数组中有任何标记结束的特殊数字,则可以使用它。否则,您无法仅使用指针找到数组的长度。而关于在函数外返回堆栈指针,可能会导致崩溃。

于 2012-11-03T18:36:57.467 回答