Rob*_*ang 13 c struct instance
在C中,定义结构时.创建新实例的正确方法是什么?我见过两种方式:
struct listitem {
int val;
char * def;
struct listitem * next;
};
Run Code Online (Sandbox Code Playgroud)
第一种方式(xCode说这是重新定义结构和错误):
struct listitem* newItem = malloc(sizeof(struct listitem));
Run Code Online (Sandbox Code Playgroud)
第二种方式:
listitem* newItem = malloc(sizeof(listitem));
Run Code Online (Sandbox Code Playgroud)
或者,有另一种方式吗?
Pro*_*ife 14
这取决于你是否想要一个指针.
最好像这样调用你的结构:
Typedef struct s_data
{
int a;
char *b;
etc..
} t_data;
Run Code Online (Sandbox Code Playgroud)
之后将其设置为无指针结构:
t_data my_struct;
my_struct.a = 8;
Run Code Online (Sandbox Code Playgroud)
如果你想要一个指针,你需要像那样malloc:
t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8
Run Code Online (Sandbox Code Playgroud)
我希望这回答你的问题
小智 13
第二种方式只有在你使用时才有效
typedef struct listitem listitem;
Run Code Online (Sandbox Code Playgroud)
在声明具有类型的变量之前listitem.您也可以静态分配结构而不是动态分配它:
struct listitem newItem;
Run Code Online (Sandbox Code Playgroud)
您演示的方式就像为每个int想要创建的内容执行以下操作:
int *myInt = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
小智 5
除了其他答案之外,我还想添加两种更紧凑的创建实例的方法。例子:
struct Person{
float position[2];
int age;
char name[20];
}
struct Person p1 = { {4, 1.1}, 20, "John" };
struct Person p2 = { .age=60, .name="Jane", .position={0, 0} };
printf("%s, aged %i, is located at (%f, %f)\n", p1.name, p1.age,p1.position[0], p1.position[1] );
printf("%s, aged %i, is located at (%f, %f)\n", p2.name, p2.age,p2.position[0], p2.position[1] );
Run Code Online (Sandbox Code Playgroud)
输出:
John, aged 20, is located at (4.000000, 1.100000)
Jane, aged 60, is located at (0.000000, 0.000000)
Run Code Online (Sandbox Code Playgroud)
请注意,p1属性的顺序与结构定义的顺序相匹配。如果您不想在使用类型时始终键入 struct,则可以使用定义一个新别名
typedef struct Person SomeNewAlias;
SomeNewAlias p1;
Run Code Online (Sandbox Code Playgroud)
你可以将新别名命名为与旧名称相同的名称即可
typedef struct Person Person;
Person p1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55322 次 |
| 最近记录: |