Перемещать из-за ссылки вектор, [закрывший]

Проблема состоит в том, что я перемещаю вектор из-за ссылки, и конечная остановка говорит мне, что он плохой.

Здесь - соответствующие коды и ошибки:

ordenavector(&vector, cont);

prueba13.c:21:6: warning: passing argument 1 of 'ordenavector' from несовместимый пойнтер type [enabled by default]

void ordenavector(int *vector[20], int numero);

prueba13.c:2:6: заметьте: expected 'int **' but argument is of type 'int (*) [20]'

1
задан 10.01.2017, 22:20
0 ответов

Сначала прежде всего не необходимо использовать указатель, чтобы сходить за ссылку с массивом, так как массивы и указатели совместимы между ними с Вашими пробами...

Пример:

#include <stdio.h>

void SetMt(int* a, int b[])
{
  a[0] = 2;
  b[1] = 4;
}

int main()
{

    // creamos una matriz:
    int z[2]; // sz 2


    SetMt(z, z);
    printf("%d %d ", z[0], z[1]); // Salida: 24

}

Я рекомендую тебе читать больше относительно указателей и массивов...

0
ответ дан 03.12.2019, 17:46

2 темы:

Не определяй размер вектора в параметре, определение функции должно бы быть:

void ordenavector(int *vector, int numero);

определив вектор как int unvector[20];, само имя уже - ссылка на Ваше положение в памяти, так что вызов:

ordenavector(unvector,20);

он больше, чем достаточный. Он эквивалентный в:

ordenavector(&unvector[0],20);

где ты перемещаешь ячейку запоминающего устройства первого объекта вектора, который совпадает с адресом, к которому он относится unvector.

Наблюдай, что следующее также правильно:

ordenavector(&unvector[10],10);

но нет:

ordenavector(&unvector.20);

так как ты перемещаешь указатель в указатель integers.

0
ответ дан 03.12.2019, 17:46