为什么指针会导致非指针编译错误?

时间:2018-11-01 19:10:11

标签: c pointers struct compilation

我有以下代码:

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

当我尝试编译时,出现以下错误:

  

[错误]下标的值既不是数组,也不是指针,也不是向量

在printf()行中

。每当我使用 p 而不是 * p 时,它都能编译并完美运行。

如果我使用(* frutos)[3] .nombre 进行编译且没有错误并且可以正常工作,那么使用 * p 可以正常工作吗?

有人可以指出我的问题是什么,为什么它对* frutos有效,但不适用于* p?

我正在Windows 10中使用DevC ++尝试这段代码。

1 个答案:

答案 0 :(得分:0)

p是一个指针,因此由于arrays "decay" into pointers,您只需要更改它:

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

对此:

printf(“%s”,p [3] .nombre);