Печать массивов в отдельной функции в C - PullRequest
2 голосов
/ 12 апреля 2011

Я пытаюсь распечатать все значения в четырех массивах, отправив их в отдельную функцию. Но проблема в том, что я не могу заставить функцию печатать все целые числа в массиве, потому что я не уверен, что я мог бы установить оператор условия в цикле 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 ]

7 голосов
/ 12 апреля 2011

Передайте второй аргумент вашей функции, который принимает длину массива.Например:

print_array(int *array, int length)
{
    for (int i = 0; i < length; i++) { /* whatever */ }
}
3 голосов
/ 12 апреля 2011

Функция не может знать, когда заканчивается массив.Этот фрагмент данных просто не существует, если вы не передадите его вручную.Массив - это просто последовательность байтов в памяти, он не имеет конечного разделителя.Таким образом, вы должны добавить параметр в функцию, сообщающую ему длину массива.

2 голосов
/ 12 апреля 2011

Измените функцию на:

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]));

, который вычислит объем памяти массива (длямассив 4 int в 32-битной системе будет 16) и разделит его на размер типа int (в 32-битной системе это 4 байта).

1 голос
/ 23 февраля 2016

в 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 голосов
/ 11 июля 2018

Изменить эту строку

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.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...