Почему указатель приводит к ошибке компиляции без указателя? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующий код:

#include <stdio.h>

struct datos_nut
{
    char nombre[17];
    float calorias;
    float proteinas;
    float colesterol;
    float fibradietetica;
};
struct datos_nut *p;

struct datos_nut (*frutos)[4]= &(struct datos_nut[4]){
    {"Aguacate", 2.33, 0.018, 0, 0.07},
    {"Almendra", 6.1, 0.187, 0, 0.143},
    {"Fresa", 0.35, 0.008, 0, 0.002},
    {"Berenjena", 0.22, 0.012, 0, 0.0137}
};

void main(void)
{
    p = *frutos;
    printf("%s",(*p)[3].nombre);
}

При попытке компиляции выдается следующая ошибка:

Значение ошибки [Error] не является ни массивом, ни указателем, ни вектором

в строке printf (). Всякий раз, когда я использую p вместо * p , он компилируется и работает отлично.

Также, если я использую (* frutos) [3] .nombre скомпилировать без ошибок и работает, разве это не должно работать с использованием * p ?

Может кто-нибудь указать мне, в чем здесь проблема и почему она работает на * frutos, но не на * p?

Я пытаюсь этот код, используя DevC ++ в Windows 10.

1 Ответ

0 голосов
/ 01 ноября 2018

p является указателем, поэтому, поскольку массив "распадаются" на указатели , вам просто нужно изменить это:

printf("%s",(*p)[3].nombre);

к этому:

Е ( "% s", стр [3] .nombre);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...