将静态数组作为参数传递
Posted
技术标签:
【中文标题】将静态数组作为参数传递【英文标题】:Passing static array as an argument 【发布时间】:2016-07-14 16:25:20 【问题描述】:1)我们可以将定义在一个函数中的静态数组(比如 fun1() )传递给 fun2() 吗?如果是,那么实参和形参分别是什么?
2)如果静态数组可以作为参数传递,那么在递归函数的情况下如何做呢?
P.S 我用的是 C
【问题讨论】:
数组是静态的并不重要,您可以将它作为任何其他数组传递。但是请记住,当您将数组传递给函数时,它会衰减为指向其第一个元素的指针,因此如果您需要数组中的元素数量,您也需要传递它。 什么叫“静态”数组?static
是一个 C 关键字,在我看来,当你使用这个词时,你的意思是别的。可能你问的和:***.com/questions/27755446/…有关
请提供一些代码。
你可以,但你不应该。避免静态数据。使数组自动或堆分配。如果您认为需要此功能,请展示您的用例。
【参考方案1】:
是的,您可以将函数中定义的静态数组传递给另一个函数。实参是静态数组,形参是非静态数组,好像静态没有意义(静态数组在编译时分配内存,内存分配在堆栈上)。 p>
如果递归函数作为静态数组在堆栈中,它会在递归调用中得到更新(如果我们更新它),它的范围是程序的生命周期。
#include <bits/stdc++.h>
using namespace std;
void fun2(int arr[],int i)
if(i==3)return ;
arr[0]=i;
fun2(arr,i+1);
void fun1()
static int sarr[]=99;
cout<<sarr[0]<<endl;
fun2(sarr,0);
cout<<sarr[0]<<endl;
int main()
fun1();
return 0;
输出:
99
2
【讨论】:
static
数组通常不在堆栈上分配。 auto
arrays 是。实际上,这取决于编译器/链接器套件的放置位置。存储类只是在那里提出了一些要求 - 如何满足它们取决于编译器。
在评论linklink之前至少谷歌
你说的太对了。但是然后了解您正在阅读的内容。您提供的链接讨论的是 statically sized 数组与 dynamically sized 数组,而不是 static
ally allocated 数组。第一个甚至完全是 C++,这使得它在这里无效。然后回到 OP 问题,然后意识到“C”标签,然后查看你的答案。然后我可能会重新考虑我的投票。 (第二个链接甚至有助于与您所说的相矛盾:“在函数中声明的静态大小的数组(而不用'static'关键字声明;这将使它们成为全局)堆栈。”以上是关于将静态数组作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章