C中的数组打印

7ivaypg9  于 2023-04-29  发布在  其他
关注(0)|答案(6)|浏览(135)

我试图通过将四个数组中的所有值发送到单独的函数来打印它们。但是,问题是我不能让函数打印数组中的所有整数,因为我不确定我可以将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]);

        }
    }
fv2wmkja

fv2wmkja1#

向函数传递第二个参数,该参数接受数组的长度。例如:

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

rkue9o1l2#

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

iklwldmw

iklwldmw3#

将功能更改为:

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字节)。

5tmbdcev

5tmbdcev4#

在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;
}

输出:

nmpmafwu

nmpmafwu5#

更改这一行

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

eqzww0vc6#

你需要修改你的打印数组

void print_array(int a[], int size) {
    int i;
    for(i = 0; i < size; i++) { // loop through each element in the array
        printf("%d ", a[i]); // print the value at the current index
    }
    printf("\n"); // add a newline at the end
}

相关问题