【问题标题】:Printing Arrays in separate Function in C在 C 中的单独函数中打印数组
【发布时间】:2011-08-03 13:57:26
【问题描述】:

我试图通过将四个数组中的所有值发送到一个单独的函数来打印它们。但是,问题是我无法获得打印数组中所有整数的函数,因为我不确定我可以将for 循环中的条件语句设置为什么,这对于任何数组都是通用的任何大小。

目前该函数只打印前 11 个数字。我认为这是因为该数组中的第一个数字是 11。

#include 无效打印数组(int a []); 无效 find_max(int b[]); 无效 find_min(int c[]); 无效搜索(int d[]); 无效排序(int e[]); 诠释主要(无效) { int first[11] = {7,7,7,7,7,7,7,7,7,7,7}; int second[14] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2}; int 第三[16] = {-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; int 第四[23] = {-3, 4, 33, 22, 9, -100, 2, 56, 57, 55, 2, 90, 2234, 32, 8, 123, 2, 33, 22, 22, 33 , -1, -3}; print_array(&second[0]); 返回(0); } 无效打印数组(int a []) { 诠释我; for(i=0;i

【问题讨论】:

    标签: c arrays function


    【解决方案1】:

    将第二个参数传递给您的函数,该参数采用数组的长度。例如:

    print_array(int *array, int length)
    {
        for (int i = 0; i < length; i++) { /* whatever */ }
    }
    

    【讨论】:

      【解决方案2】:

      函数无法知道数组何时结束。除非您手动传递,否则这条数据根本不存在。数组只是内存中的一个字节序列,它没有结束分隔符。所以你应该给函数添加一个参数,告诉它数组的长度。

      是的,这就是它在 C 中的工作方式。

      【讨论】:

      • 无论如何我可以将数组的括号[]中的值分配给变量?
      • @Mike 没错,你应该让你的程序以某种方式知道这个值,例如通过将它分配给一个变量。
      【解决方案3】:

      将函数改为:

      void print_array(int a[], size_t a_size) {
          int i;
          for(i=0; i< a_size;i++)
          // ...
      

      并改变函数的调用传入大小:

          print_array(second, sizeof(second)/sizeof(second[0]));
      

      它将计算数组的内存大小(对于 32 位系统上的 4 int 数组,它将是 16)并将其除以 int 的大小(在 32 位系统上,它是 4 个字节)。

      【讨论】:

        【解决方案4】:

        在 C 中,您可以使用函数和宏来实现:

        void printArray_(int *a, int len) {
            for (int i = 0; i < len; i++) printf("%d ", a[i]);
        }
        
        #define printArray(arr) printArray_((arr), sizeof(arr)/sizeof(arr[0]))
        
        int main(int argc, _TCHAR* argv[])
        {   
            int data[] = { 1,2,3,4 };
            printArray(data);
            return 0;
        }
        

        输出:

        1 2 3 4
        

        【讨论】:

        • 如果你在一个接收指向字符参数的函数中调用它,它将失败,因为sizeof(arr)调用将返回sizeof(char *),而不是"array decay"。跨度>
        【解决方案5】:

        改变这一行

        print_array(&second[0]);
        

        print_array(&second);
        

        因为, &second[0] 只是传递对第 0 位元素的引用,无法遍历数组。

        并且我们不能遍历没有大小的引用传递的数组。由于数组的大小不同,我们可以通过以下方式计算数组的大小,

                     int array_length = sizeof(array)/sizeof(array[0]);
        

        换行

        void print_array(int a[])
        

        void print_array(int *a,int array_length)
        

        而数组打印的功能就是,

        void print_array(int *a,int array_length){
            int i;
            for(i=0;i<array_length;i++){
                printf("%d ",*a);
                a++;          //for incrementing the position of array.
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 2013-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-06
          相关资源
          最近更新 更多