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



我有以下代码:

#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无效?

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

p是一个指针,因此由于数组"衰减"为指针,您只需要更改以下内容:

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

到此:

printf("%s",p[3]。nombre(;

最新更新