假设我们有一个返回数组的函数。
int *theFunction()
{
int a[]={1,2,3,4,5};
return a;
}
我想将函数的结果存储在指针中。
int *a=theFunction();
如何打印阵列,是否可能? 数组的长度是未知的,有没有办法找到它?
答案 0 :(得分:4)
没有
您需要使用您知道不会出现的值来描述数组,或者将指针传递给将使用大小填充它的函数。
但是你也要返回一个指向堆栈数据的指针;这也行不通。
答案 1 :(得分:3)
首先,永远不要返回指向局部变量的指针。在堆上分配该数组。
至于返回数组的大小,可以让函数返回一个包含指针和数组大小的结构。
另一种方法是让调用者传递对被调用者修改的大小变量的引用。
答案 2 :(得分:2)
a
是一个局部变量,您无法从theFunction
函数中加入其值。
无论如何,要打印一个没有大小的数组,你必须添加一个分隔符(例如一个特定的值)。
答案 3 :(得分:2)
当array
未知
size
您可以通过
解决此问题 1>提供 sentinal值,即表示数组末尾的值。
让我们考虑将-1
作为发送者然后
int a[]={1,2,3,4,5,-1};
^
|->-1 would denote the end of array
但如果您的某个值似乎为-1
或强>
2>使用结构来表示大小和数组内容
struct list
{
int *values;//the array of values
int size;//size of the values array
}
也不要返回指向具有本地范围的值的指针。在本例中,本地值为a
..一旦你退出方法,就会被销毁。进一步访问此{方法返回后的{1}}错误
答案 4 :(得分:1)
将out数组的长度作为out param返回是多么困难? 如果数组中有任何标记结尾的特殊数字,您可以使用它。 否则你无法用指针找到数组的长度。关于在函数外部返回堆栈指针,可能会导致崩溃。