我在一段代碼中遇到了類似的結構。而試圖用這些我不知何故卡住了。這是我根據我遇到的結構寫的。使用帶索引的結構創建向量
#include<stdio.h>
#include<stdint.h>
#include <string.h>
#include <stdlib.h>
typedef struct MyStruct{
unsigned char *ptr;
int len;
}MyStruct;
typedef MyStruct *Vec_MyStruct;
struct MyGroup {
int n_MyStruct;
Vec_MyStruct myStructs;
};
typedef struct MyGroup MyGroup;
typedef struct MyGroup *Vec_MyGroup;
typedef struct MyBigGroup {
int n_MyBigGroups;
Vec_MyGroup myBigGroups;
}MyBigGroup;
int ArrayData();
int main(int argc, char *argv[]){
printf("Started..\n");
ArrayData();
return 0;
}
int ArrayData()
{
printf("ArrayData called..\n");
MyStruct bb1;
memset(&bb1,0,sizeof(bb1));
bb1.ptr = (unsigned char *)malloc(6);
bb1.len = 6;
char *ch = "Hello";
memcpy(bb1.ptr, ch, bb1.len);
// printf("1: ptr %s\n", bb1.ptr);
// printf("1: len %d\n", bb1.len);
MyStruct bb2;
memset(&bb2,0,sizeof(bb2));
bb2.ptr = (unsigned char *)malloc(6);
bb2.len = 6;
char *c = "World";
memcpy(bb2.ptr, c, bb2.len);
// printf("2: ptr %s\n", bb2.ptr);
// printf("2: len %d\n", bb2.len);
Vec_MyStruct vec = malloc(sizeof(vec));
vec[0] = bb1;
vec[1] = bb2;
printf("vec[0]: ptr %s\n", vec[0].ptr);
printf("vec[0]: len %d\n", vec[0].len);
printf("vec[1]: ptr %s\n", vec[1].ptr);
printf("vec[1]: len %d\n", vec[1].len);
//
MyGroup perm;
perm.n_MyStruct = 2;// 2 My_Struct vectors
perm.myStructs = vec;
printf("perm.myStructs[0].ptr: ptr %s\n", perm.myStructs[0].ptr);
printf("perm.myStructs[0].len: len %d\n", perm.myStructs[0].len);
printf("perm.myStructs[1].ptr: ptr %s\n", perm.myStructs[1].ptr);
printf("perm.myStructs[1].len: len %d\n", perm.myStructs[1].len);
MyBigGroup grp;
grp.n_MyBigGroups = 1;
grp.myBigGroups = &perm;
printf("grp.myBigGroups[0].myStructs[0].ptr: ptr %s\n", grp.myBigGroups[0].myStructs[0].ptr);
printf("grp.myBigGroups[0].myStructs[0].len: len %d\n", grp.myBigGroups[0].myStructs[0].len);
printf("grp.myBigGroups[0].myStructs[1].ptr: ptr %s\n", grp.myBigGroups[0].myStructs[1].ptr);
printf("grp.myBigGroups[0].myStructs[1].len: len %d\n", grp.myBigGroups[0].myStructs[1].len);
return 0;
}
所以MyGroup有一個MyStruct項目的「列表」。它也有一個變量,告訴我有多少個MyStruct項目存在。 Vec_MyStuct只是指向MyStruct。 還有另一個MyGroup的分組,它是MyBigGroup。 但是我擔心的是儘管代碼工作正常,但我不確定我是否正確分配內存。特別是MyBigGroup ..或者是否有更有效的方法來使用這些結構來定義多個MyStructs條目?
謝謝。
一個建議:指針typedefs的'Vec_'前綴是一個相當不尋常的命名約定。首先,指針不是矢量。接下來,*通常*沒有任何理由,即使有一個指針typedef(我只需要它是將它傳遞給一個接受類型作爲參數的宏,但只適用於single_word_typedef類型) 。即使這樣,我看到它最常見的約定是以「p」(即類似於「pMyGroup」)的前綴。並且請注意,您可以在[單個語句](https://pastebin.com/vshwxyxS)中輸入兩個符號的類型:'typedef struct {int a; int b; } Group,* pGroup;'。 – Groo