如何打印其大小未知的int数组

时间:2012-11-03 18:33:06

标签: c arrays pointers

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

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

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

int *a=theFunction();

如何打印阵列,是否可能? 数组的长度是未知的,有没有办法找到它?

5 个答案:

答案 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返回是多么困难? 如果数组中有任何标记结尾的特殊数字,您可以使用它。 否则你无法用指针找到数组的长度。关于在函数外部返回堆栈指针,可能会导致崩溃。