尽可能在定义变量的同时初始化该变量

尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。

如果引用 了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。

 1 #include <iostream>
 2
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5
 6 //定义结构
 7 struct student {
 8     char  name[10];
 9     float   grade;
10 };
11
12 //更改student数据的grade成员,参数形式为引用
13 void change(student &x,float grade)
14 {
15     x.grade=grade;
16 }
17
18 //更改student数据的grade成员,参数形式为指针
19 void change1(student *p,float grade)
20 {
21     p->grade=grade;
22 }
23
24 //更改student类型的数据,普通参数形式
25 void change2(student x,float grade)
26 {
27     x.grade=grade;
28 }
29
30 //显示student类型的数据,参数形式为引用
31 void show(student &x)
32 {
33     cout<<x.name<<"  "<<x.grade<<endl;
34 }
35
36
37 //在main()函数中,测试对结构的处理函数
38 int main(int argc, char** argv) {
39     student a={"ZhangHua",351.5};
40
41     //显示a的数据
42     show(a);
43
44     //用change修改分数,并显示
45     cout<<"change(student &x,float grade):"<<endl;
46     change(a,360);
47     show(a);
48
49     //用change1修改分数,并显示
50     cout<<"change1(student *p,float grade):"<<endl;
51     change1(&a,375);
52     show(a);
53
54     //用change2修改分数,并显示
55     cout<<"change2(student x,float grade):"<<endl;
56     change2(a,380.5);
57     show(a);
58
59     return 0;
60 }

原文地址:https://www.cnblogs.com/borter/p/9413110.html

时间: 2024-08-01 00:34:56

尽可能在定义变量的同时初始化该变量的相关文章

C++变量的默认初始化规则

定义没有初始化式的变量时,系统有时候会帮我们初始化变量.系统如何初始化取决于变量的类型以及变量定义的位置. 内置类型变量是否自动初始化取决于变量定义的位置.函数体外定义的变量初始成0:函数体内定义的变量不进行自动初始化.除了用作赋值操作的左操作数,其他任何使用未初始化变量的行为都是未定义的,不要依赖未定义行为. 以int类型为例,一段简单的测试代码: #include <iostream> using namespace std; int a; int main() { int b; cout

定义变量时未初始化赋值的问题

变量定义时未初始化,导致生命周期结束后,重新定义变量时,仍然保存有之前的数据,或者数据为内存中的随机值. 如下代码: #include <iostream> using namespace std; typedef struct s_xy { int x; int y; } s_xy; int main() { // your code goes here for(int i = 0; i < 3; ++i) { s_xy point; volatile int num; if(1 ==

Java初始化顺序(静态变量、静态初始化块、实例变量、实例初始化块、构造方法)

1.执行顺序 1.1.一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 1.2.两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量.初始化块.构造器). 示例如下:(结果见注释) 1 class A { 2 public A() { 3 System.out.println("Constructor A."); 4 } 5

&lt;28&gt;【了解】10-枚举类型介绍及定义+【掌握】11-枚举变量变量定义和使用+【掌握】13-typedef定义新的类型+【掌握】15-宏的概念及无参宏定义方法+【掌握】16-有参宏定义和使用方法+【掌握】17-应用:使用有参宏求最大值+【掌握】18-typedef和#define的区别

[了解]10-枚举类型介绍及定义 枚举类型: C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了 枚举类型的定义: enum 枚举类型名{ 枚举值1,枚举值2,.... }; 举例: 定义一个变量,保存一周的第几天 enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri }; 定义iPhone手机的颜色 关于枚举类型元素的命名习惯 enum iColor{kIcolorWhite,kIcolorBlac

Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)(转)

大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解. 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: Java代码 p

final,static静态和非静态,初始化和代码块的区别、父类和子类中都有static变量时的初始化顺序、重写equals()、 instanceof强制转换

final:类不能被继承,方法不能被重写,属性值不能被修改(常量): 可以调用: static静态常量----- 不需要创建对象,可以直接调用类里面的属性,方法: 示例如下: 加了static说明它是属于整个类的,每个对象值都一样,如下图所示:size是静态的,所以当在下面t1对象中改变size的值时,整个类中的size值都变了:然后作为普通属性的length,当在t1对象中改变其值,并不会改变原始值: 静态方法不能调用非静态的方法和非静态的属性,也不能打印非静态的方法和非静态的属性:可以在静态

C++类特殊成员变量(引用、静态、常成员变量)的初始化操作

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同.这些特殊的类型的成员变量包括: a.引用 b.常量 c.静态 d.静态常量(整型) e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化. 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末. 参考下面的代码以及其中注释: #include <iostream> using namespace std; class BClass { public: BClas

C/C++变量的自动初始化——重要

对于内置变量的自动初始化 代码1: #include<stdio.h> #define CONST 100 int *p1; int a[2]; int b; static int c; main() { int d; static int e; int f[2]; int *p2; printf("CONST=%d\n",CONST); printf("a[0]=%d\n",a[0]); //printf("*p1=%d\n",*p

生命周期,作用域的定义;说明全局变量、静态变量、局部变量、const变量的生命周期、作用域

生命周期,作用域的定义:说明全局变量.静态变量.局部变量.const变量的生命周期.作用域: 生命周期:是一个变量存在的周期. 作用域:是一个变量可以被引用的范围.最常见的如:{}.static修饰符等等. 1)全局变量: 作用域:全局作用域(只需要在一个源文件中定义,就可以作用于所有的源文件): 生命周期:程序运行期一直存在: 引用方法:其他文件如果要使用,必须用extern 关键字声明要引用的全局变量: 内存分布:全局(静态存储区). 注意:如果再两个文件中都定义了相同名字的全局变量,则连接