Указатель структуры с присвоенным адресом

#c

#c

Вопрос:

Я занимаюсь программированием MCU и не могу понять некоторую часть кода примера FFT. Основная проблема, с которой я сталкиваюсь, заключается в понимании объявления: *pointer=amp;var

 //definition of new data types
typedef struct {
float  *InBuf;      //!< Pointer to the input buffer
float  *OutBuf;     //!< Pointer to the output buffer
float  *CosSinBuf;    //!< Pointer to the twiddle factors
float  *MagBuf;       //!< Pointer to the magnitude buffer
float  *PhaseBuf;     //!< Pointer to the phase buffer
uint16_t   FFTSize;   //!< Size of the FFT (number of real data points)
uint16_t   FFTStages; //!< Number of FFT stages
} RFFT_F32_STRUCT;

typedef RFFT_F32_STRUCT* RFFT_F32_STRUCT_Handle;


//code 
RFFT_F32_STRUCT rfft;

RFFT_F32_STRUCT_Handle hnd_rfft = amp;rfft;
 

Вопрос в том, что будет делать последняя строка кода? Если я перепишу его немного более читаемым способом, последняя строка будет:

  RFFT_F32_STRUCT* hnd_rfft= amp;rfft;
 

Так в чем же польза этой операции? Я бы понял, если бы это было написано так:

  RFFT_F32_STRUCT* hnd_rfft;
 hnd_rfft=amp;rfft;
 

Я понимаю, что это довольно сложно сказать, потому что это всего лишь часть кода, но если кто-то видит причину, я был бы очень рад, если бы он мог поделиться ею со мной.

Комментарии:

1. RFFT_F32_STRUCT* hnd_rfft = amp;rfft; просто объединяет объявление переменной RFFT_F32_STRUCT* hnd_rfft; и присвоение hnd_rfft = amp;rfft; в один оператор.

2. Вы когда-нибудь писали int x = 5; вместо int x; x = 5; ?

3. Спасибо, оба ответа были полезны. Я думал, что * является частью переменной, но, как я вижу, на самом деле это часть типа данных.

Ответ №1:

Если бы я сказал, что это делает на английском языке, это было бы — определите указатель, указывающий на местоположение типа RFFT_F32_STRUCT , и назначьте его для указания адреса hnd_rfft

Ответ №2:

Структура дескриптора в основном «выше структуры, но в форме указателя». Итак, как определено,

 RFFT_F32_STRUCT_Handle = RFFT_F32_STRUCT* 
 

Таким образом, вы можете прочитать его как таковой:

 RFFT_F32_STRUCT* hnd_rfft = amp;rfft;
 

Комментарии:

1. Проблема заключалась в том, что я думал, что эта строка означает: * hnd_rfft=amp;rfft, что не имело бы никакого смысла.