如何在C中创建对象数组?
我是C语言的新手,来自javascript这样的语言。语言中的类型、关键字等数量令人痛苦地困惑 在javascript中,我可以创建这样的对象数组如何在C中创建对象数组?,c,arrays,struct,typedef,C,Arrays,Struct,Typedef,我是C语言的新手,来自javascript这样的语言。语言中的类型、关键字等数量令人痛苦地困惑 在javascript中,我可以创建这样的对象数组 arrayOfObjectsInsideJavascript = [ { s:"ejf09j290fj390j2f09", f=0 }, { s:"dj320992209920209dj", f=0 } ] 从我读到的内容来看,我似乎需要使用typedef和或structs 我试过: typedef struct[] = {
arrayOfObjectsInsideJavascript = [
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
]
从我读到的内容来看,我似乎需要使用typedef
和或struct
s
我试过:
typedef struct[] = {
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
}
struct[] = {
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
}
typedef struct {
char[] s = "ejf09j290fj390j2f09";
int f = 0;
} objectLikeClassThingy;
创建所需对象的最佳方法是什么?像这样
struct {
const char *s;
double f;
} obj[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 }
};
像这样
struct {
const char *s;
double f;
} obj[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 }
};
JavaScript有动态的“属性”,C有静态的“标记”。结构类型定义为一系列标记,每个标记都有一个类型 用于示例数组中的类型
arrayOfObjectsInsideJavascript = [
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
]
您的上一个解决方案开始时几乎正确:
struct element {
char s[256];
int f;
};
对于s
的类型,有两个选项:
- 如果要将字符串存储在对象中,可以使用一些数组类型,例如
chars[256]
是数组的长度,因此当使用以零结尾的字符串时,允许的最大字符串长度为255(256,减去256
字符的一)'\0'
- 如果要将字符串存储在对象外部,可以使用某种指针类型。由于要使用字符串文本,因此应该将标记声明为
。更改字符串文字会导致未定义的行为,因此最好不要这样做const char*s
如果您想定义一个结构,现在可以编写如下内容
struct element {
char s[256];
int f;
} one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
或
或者,使用typedef
typedef struct {
char s[256];
int f;
} your_element_type;
/* ... later, in a scope where `your_element_type` is visible ... */
your_element_type one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
请注意,这不一定适用于不支持C99标准的旧编译器。在以前,您必须按顺序初始化字段:
your_element_type one_object = { "ejf09j290fj390j2f09", 0 };
还要注意的是,如果您再也不打算引用类型名称struct元素
,则不必将其命名为:
数组的初始化方式类似(实际上您已经用字符串初始化了数组,即
s
):
或
或者,再次使用typedef
typedef struct {
char s[256];
int f;
} your_element_type;
/* ... later, in a scope where `your_element_type` is visible ... */
your_element_type so_many_objects[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 },
};
顺便说一句,请注意,我们对
这么多对象使用的是不完整的类型
;这只可能是因为编译器可以看到数组应该有多大。在这些示例中,编译器会将您的代码视为编写了如此多的对象[2]。如果您认为必须使用更多对象扩展数组,那么最好指定数组的元素数量(最多),或者了解动态分配。如果JavaScript具有动态“属性”,则C具有静态“标记”。结构类型定义为一系列标记,每个标记都有一个类型
用于示例数组中的类型
arrayOfObjectsInsideJavascript = [
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
]
您的上一个解决方案开始时几乎正确:
struct element {
char s[256];
int f;
};
对于s
的类型,有两个选项:
- 如果要将字符串存储在对象中,可以使用一些数组类型,例如
chars[256]
是数组的长度,因此当使用以零结尾的字符串时,允许的最大字符串长度为255(256,减去256
字符的一)'\0'
- 如果要将字符串存储在对象外部,可以使用某种指针类型。由于要使用字符串文本,因此应该将标记声明为
。更改字符串文字会导致未定义的行为,因此最好不要这样做const char*s
如果您想定义一个结构,现在可以编写如下内容
struct element {
char s[256];
int f;
} one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
或
或者,使用typedef
typedef struct {
char s[256];
int f;
} your_element_type;
/* ... later, in a scope where `your_element_type` is visible ... */
your_element_type one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
请注意,这不一定适用于不支持C99标准的旧编译器。在以前,您必须按顺序初始化字段:
your_element_type one_object = { "ejf09j290fj390j2f09", 0 };
还要注意的是,如果您再也不打算引用类型名称struct元素
,则不必将其命名为:
数组的初始化方式类似(实际上您已经用字符串初始化了数组,即
s
):
或
或者,再次使用typedef
typedef struct {
char s[256];
int f;
} your_element_type;
/* ... later, in a scope where `your_element_type` is visible ... */
your_element_type so_many_objects[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 },
};
顺便说一句,请注意,我们对
这么多对象使用的是不完整的类型
;这只可能是因为编译器可以看到数组应该有多大。在这些示例中,编译器会将您的代码视为编写了如此多的对象[2]。如果您认为必须使用更多对象扩展数组,那么最好指定数组的元素数(最多),或者学习动态分配。在C中没有类和对象的概念,因为它不是面向对象的,所以我想问题应该是如何在C中创建结构数组?
我不明白这个评论的意思,如果我甚至不知道如何创建一个结构,为什么你要告诉我应该把这个问题命名为“如何在C中创建一个结构数组?”那么答案是你不能,因为没有对象的概念(类的实例)在C中,创建我需要的对象的最佳方式是什么?
我明确要求创建我想要的对象的最佳方式,而不是在C中创建javascript数组和javascript对象的最佳方式。说我不能是学究式的。“创建我需要的对象的最佳方式是什么?”-学习语言并编写C代码。没有C语言的知识,你注定会在C语言中遇到永久性的问题。这不是一种尝试和错误的语言!在C语言中没有类和对象的概念,因为它不是面向对象的,所以我想问题应该是如何在C语言中创建一个结构数组?我不明白这个评论的意思,如果我甚至不知道如何创建一个结构,你为什么告诉我我应该命名这个问题“我如何在C中创建一个结构数组?”那么对你们的问题的答案是你们不能,因为C中并没有对象(类的实例)的概念<