首页 文章

在C中的单独功能中打印阵列

提问于
浏览
1

我'm trying to print all of the values in the four arrays by sending them to a separate function. But, the problem is I can'得到了打印数组中所有整数的函数,因为我不确定我能在 for 循环中设置条件语句,这对于任何大小的任何数组都是通用的 .

此时该功能仅打印前11个数字 . 我认为那是因为该数组中的第一个数字是11 .

#include <stdio.h>

    void print_array(int a[]);

    void find_max(int b[]);

    void find_min(int c[]);

    void search(int d[]);

    void SORT(int e[]);

    int main(void)
    {
        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 third[16] = {-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

        int fourth[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]);


        return(0);
    }

    void print_array(int a[])
    {

        int i;
        for(i=0;i<*a;i++)
        {
            printf("%d ",a[i]);

        }
    }

5 回答

  • 1

    将第二个参数传递给函数,该参数获取数组的长度 . 例如:

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

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

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

  • 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个字节) .

  • 1

    在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
    
  • 0

    改变这一行

    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.
        }
    }
    

相关问题