我正在尝试创建一个结构数组,但一直出现此错误。 你能告诉我吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MODEL_LENGTH 4
#define NUM_OF_DESTINATIONS 8
#define MAX_DESTINATIONS_WORD_LENGTH 12
#define NUM_OF_PLANES 3
typedef struct
{
char p_model[MODEL_LENGTH];
char p_destinations[NUM_OF_DESTINATIONS][MAX_DESTINATIONS_WORD_LENGTH];
} airplane;
airplane a_737 = { "737", {"Larnaca", "Athens", "Budapest", "Zurich",
"London", "Paris", "Rome"} };
airplane b_747 = { "747", {"London", "New York", "Bangkok"} };
airplane c_787 = { "787", {"London", "New York", "Los Angeles", "Hong
Kong", "Miami"} };
airplane planes_arr[NUM_OF_PLANES] = { a_737, b_747, c_787 };
我以前使用数字而不是#define,在阅读帖子后,我对其进行了更改,但是我仍然不明白这里出了什么问题。
更新:
我尝试将数组更改为“ airplane * planes_arr []”。
我尝试输入:
airplane *a_ptr = &a_737;
并尝试将“ a_ptr”放入数组中,但我不断收到相同的错误。
现在,我更改为:
airplane *planes_arr[NUM_OF_PLANES] = { &a_737, &b_747, &c_787};
并没有显示错误。
请问对此主题的解释吗?
答案 0 :(得分:2)
尝试使用适当的常量初始化整个数组:
airplane planes_arr[NUM_OF_PLANES] = {
{ "737", {"Larnaca", "Athens", "Budapest", "Zurich", "London", "Paris", "Rome"}},
{ "747", {"London", "New York", "Bangkok"}},
{ "787", {"London", "New York", "Los Angeles", "Hong Kong", "Miami"}}
};
并在函数内定义单个变量(为什么不使用数组元素??
int main(void) {
airplane a_737 = planes_arr[0]; // copy
airplane b_747 = planes_arr[1];
airplane c_787 = planes_arr[2];
}
答案 1 :(得分:1)
请问对此主题的解释吗?
这对数组(虽然是cpp)有些微不足道,但我相信是相关的:
https://www.learncpp.com/cpp-tutorial/61-arrays-part-i/
问题是“声明一个固定数组时,该数组的长度(在方括号之间)必须是一个编译时常量”(来自learncpp.com)
编译和运行之间有区别。要获取a_737等的值,不仅需要编译程序,还需要运行程序。因此a_737 ...等的值在编译时无法确定。
尽管内存地址(即&a_787等)是由编译器在编译时确定的。
如果您尝试
airplane *a_ptr = &a_737;
airplane *planes_arr[NUM_OF_PLANES] = { a_ptr, &b_747, &c_787 };
然后必须在运行时完成对a_ptr的分配。并且不是编译时间常数,因此会遇到相同的错误。 C编译器不是很“智能”,因为它们在编译之前不会运行分配。
即使您可以事先编写分配,但在全局范围中没有预先确定的顺序供编译器理解。但是,此代码将在非全局范围(例如函数)中运行,因为它们现在将按顺序编译和执行。
这里有类似的问题?