#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, что не имело бы никакого смысла.