#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
}
我想知道以下内容:
我在'main'函数上面创建了一个静态数组。这有效吗?如果我使用一个点和malloc代替它会更好吗?
我知道它不使用堆栈,所以当我将数组传递给内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置?
< / LI>在函数'myfunc'中处理'array'时,我是直接使用静态定义的数组还是一些本地副本?
在函数'myfunc'中,当我们将数组传递给函数'myfuncinfunc'时,它会再次发送,只将第一个位置或数组的完整副本发送到堆栈中吗?
< / LI> 醇>感谢您阅读该问题,非常感谢任何帮助!我是C的新手并试图通过互联网学习它。
答案 0 :(得分:2)
顺便说一下,如果a
和b
是数组中的索引,请考虑为它们使用size_t
类型(保证unsigned int
大到足以索引数组)。
答案 1 :(得分:1)
- 我创建了一个静态数组,如上面的&#39; main&#39;功能。这有效吗?如果我使用一个点和malloc会更好吗?
醇>
定义&#34;高效&#34;。由于分配/释放的运行时开销,静态分配的数组总是比更快。
在这种情况下,您分配了大量的100k字节,这可能是内存效率非常低的。
此外,您的进程可能没有那么多可用的静态内存,具体取决于操作系统。因此,在桌面系统上,只要使用大量数据,就应该在堆上进行分配。
- 我知道它没有使用堆栈,所以当我将数组传递给内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置?
醇>
你不能通过C中的值传递数组。因此,指向数组第一个元素的指针将保存在堆栈中并传递给函数。
- 在&#39;阵列上工作时在函数&#39; myfunc&#39;中,我是直接使用静态定义的数组还是一些本地副本?
醇>
直接在静态数组上。同样,您无法按值传递数组。
在函数&#39; myfunc&#39;内部,当我们将数组传递给函数&#39; myfuncinfunc&#39;时,它会再次将数组的第一个位置或完整副本发送到堆栈?
指向第一个元素的指针。