假设我们有一个返回数组的函数。
int *theFunction()
{
int a[]={1,2,3,4,5};
return a;
}
我想将函数的结果存储在指针中。
int *a=theFunction();
我如何打印数组,甚至可能吗?数组的长度未知,有没有办法找到它?
不。
您需要使用您知道不会出现的值来描述数组,或者将指针传递给将使用大小填充它的函数。
但是您还返回了指向堆栈上数据的指针;那也行不通。
首先,永远不要返回指向局部变量的指针。在堆上分配该数组。
至于返回数组的大小,您可以让函数返回一个包含指针和数组大小的结构。
另一种方法是让调用者传递对被调用者修改的大小变量的引用。
a
是一个局部变量,你不能在theFunction
函数之外访问它的值。
无论如何,要打印一个没有大小的数组,您必须添加一个分隔符(例如,一个特定的值)。
未知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
在方法返回后进一步访问它是错误的
将数组的长度也作为输出参数返回有多难?如果数组中有任何标记结束的特殊数字,则可以使用它。否则,您无法仅使用指针找到数组的长度。而关于在函数外返回堆栈指针,可能会导致崩溃。