여기 JavaScript에는 동적 "속성"이 있으며 C에는 정적 "태그"가 있습니다. 구조체 유형은 태그 유형으로 정의되며 각 유형은 태그 유형을가집니다. 귀하의 예를 배열 내부의 유형에 대해
는
arrayOfObjectsInsideJavascript = [
{ s:"ejf09j290fj390j2f09", f=0 },
{ s:"dj320992209920209dj", f=0 }
]
마지막 솔루션은 거의 정확하게 시작했다 :
- 경우 :
struct element {
char s[256];
int f;
};
당신은 s
의 유형에 대한 두 가지 옵션이 있습니다 당신은 객체 내부에 문자열을 저장하기를 원한다면, 어떤 배열 타입을 사용하라. 예 : char s[256]
. 256
은 배열의 길이이므로 0으로 끝나는 문자열을 사용할 때 허용되는 최대 문자열 길이는 255입니다 (문자는 '\0'
의 경우 256에서 1).
- 문자열을 개체 외부에 저장하려면 포인터 유형을 사용합니다. 문자열 리터럴을 사용하려는 경우 태그를
const char *s
으로 선언해야합니다. 문자열 리터럴을 변경하면 정의되지 않은 동작이 발생하므로 자신을 방지하는 것이 가장 좋습니다.
이 답변의 경우 첫 번째 옵션을 사용합니다. 당신이 한 구조체를 정의하려면
, 당신은 지금하는 typedef
와
struct element {
char s[256];
int f;
} one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
또는
struct element {
char s[256];
int f;
};
/* ... later, in a scope where `struct element` is visible ... */
struct element one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
또는, 같은 것을 쓸 수
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,
};
,536,
C99 표준을 지원하지 않는 구형 컴파일러에서는 이것이 작동하지 않는다는 점에 유의하십시오.다시 유형 이름 struct element
를 참조 할 것 없습니다하는 경우
your_element_type one_object = { "ejf09j290fj390j2f09", 0 };
는 또한 이 이름이 그렇게하지, 그주의 : 이전 일, 당신은 순서대로 필드를 초기화해야 할 것 그것은 :
struct {
char s[256];
int f;
} one_object = {
.s = "ejf09j290fj390j2f09",
.f = 0,
};
배열이 유사하게 초기화된다 (실제로 이미 문자열 배열, 즉 s
, 초기화 한) :
을
struct element {
char s[256];
int f;
} so_many_objects[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 },
};
또는
다시
typedef
와
struct element {
char s[256];
int f;
};
/* ... later, in a scope where `struct element` is visible ... */
struct element so_many_objects[] = {
{ .s = "ejf09j290fj390j2f09", .f = 0 },
{ .s = "dj320992209920209dj", .f = 0 },
};
또는, 그런데
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 },
};
, 우리는 so_many_objects
에 대한 불완전한 유형을 사용하고 있습니다; 이는 컴파일러가 배열의 크기를 볼 수 있기 때문에 가능합니다. 이 예제에서 컴파일러는 마치 코드가 struct element so_many_objects[2]
인 것처럼 취급합니다. 더 많은 객체로 배열을 확장해야한다고 생각한다면 배열에 포함 된 요소의 수 (최대)를 지정하거나 동적 할당에 대해 알아 두는 것이 좋습니다.
객체 지향이 아니기 때문에'C 클래스와 객체 '에 대한 개념이 없다. 그래서 나는'어떻게 C로 구조체의 배열을 만들 수 있을까?'라고 생각한다. – Cherubim
나는 요점을 얻지 못한다. 이 주석, 구조를 작성하는 방법을 모르는 경우 왜 내가 "C로 구조체의 배열을 작성합니까?"라는 질문에 이름을 붙여야한다고 말하고 있습니까? –
그렇다면 질문에 대한 답은 ** C의 객체 (클래스의 인스턴스) 개념이 없으므로 ** 할 수 없습니다 ... – Cherubim