2015-10-07 5 views
0

У меня есть две функции, которые используют косвенный оператор *, и необходимо вызвать вторую функцию из первой функции и передать параметры, заданные первой функции, и сомнительно, если я должен использовать *10 или & передать адрес буфера.Вызов функции с косвенным оператором

char Func1(short Enable, char Event, char *BufferX) 
{ 
    char xResult; 

    xResult=Func2(Event, ?BufferX);//* or & 
    return xResult; 
} 

char Func2(char Event, char *BufferX) 
{ 

} 

Код C для микроконтроллеров, а не стандартных С.

+0

Учитывая эти определения функций, вам не нужно использовать '' и '' '' '' ', просто передайте' BufferX'. –

+0

'char * BufferX' здесь является указателем на' char', что часто означает строку с нулевым завершением C. – crashmstr

+0

Микроконтроллеры, такие как точки с запятой! – wildplasser

ответ

2

У меня есть две функции, которые использует косвенную оператор *

Звездочка * можно интерпретировать как оператор в разыменовывания в контексте выражения. В контексте декларации он служит для указания того, что объявляемый тип является указателем.

[I] нужно вызвать вторую функцию от первой функции и передавать параметры, данные первую функцию

Поскольку оба типа идентичен, вам не нужно использовать любой оператор на все : просто передать значение указателя изменяется, как это:

xResult=Func2(Event, BufferX); 

Примечание: Само собой разумеется, что вам нужно опережающее объявление о Func2 в порядке Ф.О. Этот вызов должен быть правильно интерпретирован.

+0

Вы говорите о прототипах? Да, я понимаю эту часть. –

+0

@ E_Blue Да, это именно то, о чем я говорю. Передовые декларации и прототипы - это одно и то же. – dasblinkenlight

1

Правильный вызов:

xResult=Func2(Event, /*nothing here*/BufferX); 

С вашего BufferX уже правильного типа данных вы не должны ни де-ссылки или взять адрес этого.

1

Func2 хочет аргумент типа char*. Тип BufferX уже char*.

Таким образом, вы можете просто передать BufferX прямо Func2:

xResult = Func2(Event, BufferX); 

&BufferX даст вам адрес BufferX, типа char**, в то время как *BufferX даст вам вещь, которая BufferX указывает на, то есть в char.

+0

Вы пытались написать char * вместо char ** или есть тип char **, о котором я не знаю? –

+0

@E_Blue Нет. Я действительно имел в виду 'char **'. '*' В 'type *' означает «указатель на», поэтому 'char *' = указатель на 'char' и' char ** '= указатель на' char * '. – emlai

+0

Pointerception. Никогда не читал об этом раньше. Любое слово, чтобы рекомендовать мне выполнить поиск? –

1

Код, который вы указали, является не с использованием оператора косвенности, он использует типы указателей. Значения, имеющие тип указателя, являются единственным видом, который может быть операндом оператора косвенности, но это отдельный вопрос.

В частности, аргумент BufferX функции Func1() имеет тип char *, что делает его указатель на char (предположительно это указывает на первый char более длинного буфера).

Аргумент BufferX до Func2() также имеет тип char *. Если уместно передать аргументы от Func1() к Func2(), то вам не нужно никаких украшений - вы просто хотите, чтобы передать значения, которые вы получили:

xResult = Func2(Event, BufferX); 
2

пусть var быть указателем ..

*var означает значение указатель ссылается ..

&var означает адрес переменной Var (Независимо от того, что является указателем)

так что в этом с ase вам нужно передать только переменную.

xResult=Func2(Event, BufferX); 

Его так как Func2 просит указатель во втором аргументе. (Не значение, а не адрес указателю ..)