C 将静态数组传递给函数是否有效?

C 将静态数组传递给函数是否有效?,c,static-array,C,Static Array,我想知道以下情况: 我已经创建了一个静态数组,如上面的“main”函数所示。这有效吗?如果我用点和malloc来代替会更好吗 我知道它不使用堆栈,所以当我将数组传递到内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置 在处理函数“myfunc”中的“array”时,我是直接处理静态定义的数组还是某些本地副本 在函数“myfunc”中,当我们将数组传递到函数“myfuncinfunc”中时,它是否会再次只将数组的第一个位置或完整副本发送到堆栈中 感谢阅读此问题,并将非常感谢任何帮助!我是

我想知道以下情况:

  • 我已经创建了一个静态数组,如上面的“main”函数所示。这有效吗?如果我用点和malloc来代替会更好吗

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

  • 在处理函数“myfunc”中的“array”时,我是直接处理静态定义的数组还是某些本地副本

  • 在函数“myfunc”中,当我们将数组传递到函数“myfuncinfunc”中时,它是否会再次只将数组的第一个位置或完整副本发送到堆栈中

  • 感谢阅读此问题,并将非常感谢任何帮助!我是C语言的新手,试图从网上学习

  • 我不认为它会比堆上的数组更高效或更低效
  • 它衰减为指向第一个条目的指针
  • 因此,它不是本地副本,而是阵列本身
  • 同上
  • <>顺便说一下,如果<代码> < <代码> >代码> b>代码>是数组中的索引,请考虑使用<代码> SsieZiT<<代码>类型(它是<代码>未签名的INT/COD>保证大到足以索引数组)。
  • 我不认为它会比堆上的数组更高效或更低效
  • 它衰减为指向第一个条目的指针
  • 因此,它不是本地副本,而是阵列本身
  • 同上
  • <>顺便说一下,如果<代码> < <代码> >代码> b>代码>是数组中的索引,请考虑使用<代码> SsieZiT<<代码>类型(它是<代码>未签名的INT/COD>保证大到足以索引数组)。
  • 我不认为它会比堆上的数组更高效或更低效
  • 它衰减为指向第一个条目的指针
  • 因此,它不是本地副本,而是阵列本身
  • 同上
  • <>顺便说一下,如果<代码> < <代码> >代码> b>代码>是数组中的索引,请考虑使用<代码> SsieZiT<<代码>类型(它是<代码>未签名的INT/COD>保证大到足以索引数组)。
  • 我不认为它会比堆上的数组更高效或更低效
  • 它衰减为指向第一个条目的指针
  • 因此,它不是本地副本,而是阵列本身
  • 同上
  • <>顺便说一下,如果<代码> < <代码> >代码> b>代码>是数组中的索引,请考虑使用<代码> SsieZiT<<代码>类型(它是<代码>未签名的INT/COD>保证大到足以索引数组)。
  • 我已经创建了一个静态数组,如上面的“main”函数所示。这有效吗?如果我用点和malloc来代替会更好吗
  • 定义“有效”。由于分配/解除分配的运行时开销,静态分配的数组总是比动态数组快

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

    此外,根据操作系统的不同,您的进程可能没有那么多可用的静态内存。因此,在桌面系统上,当您使用大量数据时,在堆上进行分配被认为是最佳做法

  • 我知道它不使用堆栈,所以当我将数组传递到内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置
  • 在C中不能按值传递数组。因此,指向数组第一个元素的指针将保存在堆栈上并传递给函数

  • 在处理函数“myfunc”中的“array”时,我是直接处理静态定义的数组还是某些本地副本
  • 直接在静态数组上。同样,不能按值传递数组

    在函数“myfunc”中,当我们将数组传递到函数“myfuncinfunc”中时,它是否会再次只将数组的第一个位置或完整副本发送到堆栈中

    指向第一个元素的指针

  • 我已经创建了一个静态数组,如上面的“main”函数所示。这有效吗?如果我用点和malloc来代替会更好吗
  • 定义“有效”。由于分配/解除分配的运行时开销,静态分配的数组总是比动态数组快

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

    此外,根据操作系统的不同,您的进程可能没有那么多可用的静态内存。因此,在桌面系统上,当您使用大量数据时,在堆上进行分配被认为是最佳做法

  • 我知道它不使用堆栈,所以当我将数组传递到内部函数时,它会创建整个数组的副本还是只发送第一个条目的位置
  • 在C中不能按值传递数组。因此,指向数组第一个元素的指针将保存在堆栈上并传递给函数

  • 在处理函数“myfunc”中的“array”时,我是直接处理静态定义的数组还是某些本地副本
  • 直接在静态数组上。同样,不能按值传递数组

    在函数“myfunc”中,当我们将数组传递到函数“myfuncinfunc”中时,它是否会再次只将数组的第一个位置或完整副本发送到堆栈中

    指向第一个元素的指针

  • 我已经创建了一个静态数组,如上面的“main”函数所示。这有效吗?如果我用点和malloc来代替会更好吗
  • 定义“有效”。由于分配/解除分配的运行时开销,静态分配的数组总是比动态数组快

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

    此外,您的进程可能没有那么多可用的静态内存,dependi
    #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
    }