Неожиданное выражение в C

#c #pointers

#c #указатели

Вопрос:

Могу ли я узнать, почему я получаю сообщение об ошибке:

 Unexpected Expression before 'INTL_MONEY_VALUE_PTR'?
  

Я хочу создать тип данных INTL_MONEY_VALUE , который может хранить число с плавающей запятой для представления денежной стоимости и валюты. Кроме того, INTL_MONEY_VALUE_PTR , является указателем на международный денежный тип значения выше.

 #include <stdio.h>
#include <string.h>
#define COUNTRY 4
#define AMOUNT 20.20


int main()
{
    typedef struct
    {
        float value;
        char currency[COUNTRY];
    } INTL_MONEY_VALUE;

    INTL_MONEY_VALUE sg = { AMOUNT, "SGD" };

    // Pointer
    typedef INTL_MONEY_VALUE *INTL_MONEY_VALUE_PTR;

    printf("Amount: %s %.2fn", sg.currency, sg.value);
    printf("Pointer: %sn", *INTL_MONEY_VALUE_PTR);

    return 0;
}
  

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

1. typedef INTL_MONEY_VALUE *INTL_MONEY_VALUE_PTR; -> INTL_MONEY_VALUE *INTL_MONEY_VALUE_PTR;

Ответ №1:

INTL_MONEY_VALUE_PTR является a typedef , а не фактической объявленной переменной указателя. Оно даже не существует во время выполнения (это просто удобная функция для объявления указателей INTL_MONEY_VALUE ). Вы не можете разыменовать его, потому что «оно» не существует.

Если вы хотите объявить указатель на INTL_MONEY_VALUE , вы бы не использовали typedef , просто:

 INTL_MONEY_VALUE *INTL_MONEY_VALUE_PTR;  // possibly initialized to amp;sg
  

Если вы хотите напечатать адрес фактического объявленного экземпляра структуры (на что, по-видимому, указывает код, который он должен выполнять), вам вообще не нужно typedef объявление or a , вы бы просто сделали:

 printf("Pointer: %pn", amp;sg);