将静态数组传递给函数有效吗?

时间:2014-03-03 13:31:30

标签: c static-array

#define BUFF_SIZE 100000
unsigned char buffer[BUFF_SIZE];

void myfunc(unsigned char[],int,int);
void myfuncinfunc(unsigned char[],int,int);

int main()
{
int a = 10, b = 10;
myfunc(buffer,a,b);
}

void myfunc(unsigned char array[],int a,int b)
{
int m,n;
//blah blah
myfuncinfunc(array,m,n);
}

void myfuncinfunc(unsigned char array[],int a, int b)
{
//blah blah
}

我想知道以下内容:

  1. 我在'main'函数上面创建了一个静态数组。这有效吗?如果我使用一个点和malloc代替它会更好吗?

  2. 我知道它不使用堆栈,所以当我将数组传递给内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置?

    < / LI>
  3. 在函数'myfunc'中处理'array'时,我是直接使用静态定义的数组还是一些本地副本?

  4. 在函数'myfunc'中,当我们将数组传递给函数'myfuncinfunc'时,它会再次发送,只将第一个位置或数组的完整副本发送到堆栈中吗?

    < / LI>

    感谢您阅读该问题,非常感谢任何帮助!我是C的新手并试图通过互联网学习它。

2 个答案:

答案 0 :(得分:2)

  1. 我不知道如何效率低于堆上的数组。
  2. 它衰变成指向第一个条目的指针。
  3. 因此它不是本地副本,而是数组本身。
  4. 同上。
  5. 顺便说一下,如果ab是数组中的索引,请考虑为它们使用size_t类型(保证unsigned int大到足以索引数组)。

答案 1 :(得分:1)

  
      
  1. 我创建了一个静态数组,如上面的&#39; main&#39;功能。这有效吗?如果我使用一个点和malloc会更好吗?
  2.   

定义&#34;高效&#34;。由于分配/释放的运行时开销,静态分配的数组总是更快。

在这种情况下,您分配了大量的100k字节,这可能是内存效率非常低的。

此外,您的进程可能没有那么多可用的静态内存,具体取决于操作系统。因此,在桌面系统上,只要使用大量数据,就应该在堆上进行分配。

  
      
  1. 我知道它没有使用堆栈,所以当我将数组传递给内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置?
  2.   

你不能通过C中的值传递数组。因此,指向数组第一个元素的指针将保存在堆栈中并传递给函数。

  
      
  1. 在&#39;阵列上工作时在函数&#39; myfunc&#39;中,我是直接使用静态定义的数组还是一些本地副本?
  2.   

直接在静态数组上。同样,您无法按值传递数组。

  

在函数&#39; myfunc&#39;内部,当我们将数组传递给函数&#39; myfuncinfunc&#39;时,它会再次将数组的第一个位置或完整副本发送到堆栈?

指向第一个元素的指针。