结构体里数组的初始化

当结构体里有数组变量时,该如何进行初始化呢?如:

struct Test
{
	int index;
	int value;
	int array[2];
	char *ptr;
};

记住一个规则:把数组或结构体当成一个整体,然后这个整体就用一个{}进行初始化即可。

如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Test
{
	int index;
	int value;
	int array[2];
	char *ptr;
};


int main(void)
{
	char *p = (char*)malloc(12);

	struct Test t = {1, 0, {100, 200}, p};
	memcpy(t.ptr, "aaaa", 12);
	t.ptr[12] = '\0';

	printf("t.index = %d, t.value = %d, t.array[0] = %d, t.array[1] = %d, t.ptr = %s\n", 
					t.index, t.value, t.array[0], t.array[1], t.ptr);

	return 0;

}

 

引用\[1\]:这样其实是对指针内容(不是结构体内容)赋值,而不是想象的对结构体赋值;如果用结构名赋值,才能这样写。\[1\]引用\[2\]:我们举个例子,下面是 Animal 的结构体。 struct Animal { char *name; //指针成员 int age; char info\[200\]; //字符数组 struct Animal *nextAnimal; //指针成员 };\[2\]引用\[3\]:在VS中初始化链表,涉及到节点结构体初始化,一开始的写法: typedef struct ListNode { int val; struct ListNode* next; }Node,*Link; struct ListNode* pnode_1, * pnode_2, * pnode_3, * pnode_4, * pnode_5,*head; *pnode_1 = { -21,pnode_2 };>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>第一处报错//这样其实是对指针的内容赋值,而不是想象的对结构体赋值;如果用结构名赋值,才能这样写 pnode_1 = (struct ListNode*)malloc(sizeof(struct ListNode));>>>>>>>>第二处报错 bool hasCycle(struct ListNode* head); int main(void) { //省略……………… } bool hasCycle(struct ListNode* head) { //省略……………… } 原因分析: 第一处报错: 。 问题:结构体指针数组初始化 回答: 结构体指针数组初始化可以通过以下方式进行。首先,定义一个结构体类型,例如struct ListNode。然后,使用malloc函数为结构体指针数组分配内存空间,例如pnode_1 = (struct ListNode*)malloc(sizeof(struct ListNode));。接下来,可以通过指针的方式对结构体的成员进行赋值,例如pnode_1->val = -21; pnode_1->next = pnode_2;。最后,记得在使用完结构体指针数组后,使用free函数释放内存空间,例如free(pnode_1)。\[1\] #### 引用[.reference_title] - *1* *3* [关于指针结构体初始化](https://blog.csdn.net/weixin_52297124/article/details/127759473)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C 结构体指针初始化](https://blog.csdn.net/AndroidBluetooth/article/details/89578484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值