#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);