定义结构体时的初始化默认值

本文探讨了结构体变量初始化的问题,特别是针对int型和指针型成员的区别,以及如何正确初始化链表节点。同时强调了全局和局部变量初始化的区别,并提醒开发者手动清空变量的重要性。此外,文章还提到了声明变量时不分配空间的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体变量定义时的初始化问题:

默认值同变量一样,int型的为0,指针型的为“NULL”------------并不是整个结构体为NULL,其中的int型还是有值0的,只是指针型的为NULL

验证一下:


#include "stdafx.h"
struct stu
{
	int data;
	char *name;
}boy1,girl={102,"xiaom"};


int _tmain(int argc, _TCHAR* argv[])
{
	printf("Number=%d\nName=%s\n",boy1.data,boy1.name);
	printf("Number=%d\nName=%s\n",girl.data,girl.name);
	boy1=girl;
	printf("Number=%d\nName=%s\n",boy1.data,boy1.name);
	printf("Number=%d\nName=%s\n",girl.data,girl.name);
	return 0;
}
输出结果为:


同理,链表的节点如果只是定义而未赋值的话,它的data为0,指针为null


但是,初始化的值是不确定的,需要自己清空。
一般是会初始化为0,但建议不要依赖自动初始化,自己动手清空,比较保险。

全局的变量会自动清空,但是局部的话,还是自己手动清空的!


另外,如果只是声明的话,编译器是不会为此声明分配空间的

如下:


struct stu
{
	int data;
	char *name;
};

这样是没有初始值的



C++中,结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起作为一个整体处理。给结构体成员初始值有几种常见的方式: ### 1. **直接初始化** 这是最简单的一种方式,在声明结构体变量的同为其成员指定初始值。 ```cpp #include <iostream> using namespace std; struct Point { int x; int y; }; int main() { // 直接初始化 Point p = {3, 4}; cout << "p.x = " << p.x << ", p.y = " << p.y << endl; } ``` ### 2. **构造函数初始化** 如果你希望每次创建结构体实例都自动予特定的默认值,可以为结构体添加一个构造函数,并通过构造函数列表来进行初始化。 ```cpp #include <iostream> using namespace std; struct Rectangle { double width; double height; // 构造函数用于初始化成员变量 Rectangle(double w = 0.0, double h = 0.0) : width(w), height(h) {} }; int main() { // 使用构造函数初始化 Rectangle rect(5.0, 6.0); cout << "rect.width = " << rect.width << ", rect.height = " << rect.height << endl; } ``` 从 C++11 开始,还可以利用**大括号初始化**语法来简化这一过程: ```cpp Rectangle r{7.0, 8.0}; // 大括号初始化 ``` ### 3. **统一初始化 (C++11 及以上版本)** 对于所有数据类型的对象都可以采用花括号包围的形式进行初始化,这种方式既安全又直观,避免了某些传统初始化带来的二义性和潜在错误。 ```cpp Point another_p{}; // 全部设置为零或其他默认值 another_p.x = 9; another_p.y = 10; ``` 此外,如果你想让某个字段保持未初始化状态,则可以在初始化列表中省略该字段;但是通常建议显式地提供全部必要的初始值以保证程序的安全性与健壮性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值