Как вызвать функцию с указателем в качестве аргумента внутри функции с аргументом с указателем - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть функция с именем reverse, которая объявлена ​​примерно так: '' '

void reverse(Number *n)

Как мне вызвать функцию reverse внутри этой функции с первым или вторым аргументом. Я попробовал это:

1)

Number fun1(Number *first,Number *second)
{
        if(first->redosled == 'd') reverse(&first);
        if(second->redosled == 'd') reverse(&second);
}

2)

Number fun1(Number *first,Number *second)
{
        if(first->redosled == 'd') reverse(first);
        if(second->redosled == 'd') reverse(&second);
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

first и second являются указателями, поэтому вам нужно отправить их в качестве аргументов без &, например:

Number fun1(Number *first,Number *second)
{
        if(first->redosled == 'd') reverse(first);
        if(second->redosled == 'd') reverse(second);
}
0 голосов
/ 16 апреля 2020

Как вызвать функцию наоборот в этой функции с первым или вторым в качестве аргумента. Я попробовал это

Number fun1(Number *first,Number *second)
{
        if(first->redosled == 'd') reverse(first);
        if(second->redosled == 'd') reverse(second);
}

Вот примерный пример того, как вы можете попробовать описанное выше для своего варианта использования. Кроме того, обратите внимание, что функция fun возвращает числовой указатель переменная

#include <stdio.h>

//this is number structure(object)
//probably you have defined something similar
typedef struct __number_t{
    char redeslod;
    int number;
}Number;

void reverse(Number *n){ // accept pointer as argument
    //do your reverse logic here
    printf("number is %d\n", n->number);
}

Number *fun(Number *first, Number *second){ //accept pointer as argument, returns a pointer
    Number *ret = NULL;
    if(first->redeslod=='d'){
        //reverse(&first); this will pass a pointer to pointer
        reverse(first);
    }

    if(second->redeslod=='d'){
        reverse(second);
    }

    //do not forget to return your number here
    return ret;
}

int main()
{
    Number first,second;
    first.redeslod = 'd'; 
    first.number = 1;
    second.redeslod = 'c';
    second.number = 2;

    fun(&first, &second);   //here &passes the address

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...