Как я изменяю указатель, который был передан в функцию в C?

Прямым ответом было бы изменить сеть учебного симулятора Veins 4.7.1 , добавив узел Tic и узел Toc. Я предполагаю, однако, что это не то, что вы имели в виду. Возможно, вы захотите изменить симуляцию учебника вен для использования вашего my_config_file.sumocfg вместо своего собственного erlangen.sumo.cfg файла .

Файл, который сконфигурирован как симулятор дорожного движения в omnetpp.ini , называется erlangen.launchd.xml . Изменяя этот файл (или настраивая симуляцию для использования другого), вы можете изменить, какой сценарий SUMO имитируется при запуске примера Veins.

49
задан Paul Wicks 19 April 2009 в 17:31
поделиться

5 ответов

Вам нужно передать указатель на указатель, если вы хотите это сделать.

void barPush(BarList ** list,Bar * bar)
{
    if (list == NULL) return; // need to pass in the pointer to your pointer to your list.

    // if there is no move to add, then we are done
    if (bar == NULL) return;

    // allocate space for the new node
    BarList * newNode = malloc(sizeof(BarList));

    // assign the right values
    newNode->val = bar;
    newNode->nextBar = *list;

    // and set the contents of the pointer to the pointer to the head of the list 
    // (ie: the pointer the the head of the list) to the new node.
    *list = newNode; 
}

Затем используйте это следующим образом:

BarList * l;

l = EMPTY_LIST;
barPush(&l,&b1); // b1 and b2 are just Bar's
barPush(&l,&b2);

Джонатан Леффлер предложил вернуть нового заголовка списка в комментариях:

BarList *barPush(BarList *list,Bar *bar)
{
    // if there is no move to add, then we are done - return unmodified list.
    if (bar == NULL) return list;  

    // allocate space for the new node
    BarList * newNode = malloc(sizeof(BarList));

    // assign the right values
    newNode->val = bar;
    newNode->nextBar = list;

    // return the new head of the list.
    return newNode; 
}

Использование становится:

BarList * l;

l = EMPTY_LIST;
l = barPush(l,&b1); // b1 and b2 are just Bar's
l = barPush(l,&b2);
54
ответ дан 7 November 2019 в 11:44
поделиться

Помните, что в C ВСЕ передается по значению.

Вы передаете указатель на указатель, как this

int myFunction(int** param1, int** param2) {

// now I can change the ACTUAL pointer - kind of like passing a pointer by reference 

}
13
ответ дан 7 November 2019 в 11:44
поделиться

Да, вы должны передать указатель на указатель. C передает аргументы по значению, а не по ссылке.

2
ответ дан 7 November 2019 в 11:44
поделиться

Это классическая проблема. Либо верните выделенный узел, либо используйте указатель указателя. В C вы должны передать указатель на X в функцию, где вы хотите, чтобы ваш X был изменен. В этом случае, так как вы хотите изменить указатель, вы должны передать указатель на указатель.

2
ответ дан 7 November 2019 в 11:44
поделиться

Общий ответ: передайте указатель на то, что вы хотите изменить.

В этом случае это будет указатель на указатель, который вы хотите изменить.

14
ответ дан 7 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: