[C++再学习系列] 变量与声明时初始化

简介:

      未初始化的变量常常会导致一些奇怪的bug,有时还真不好调式。养成在初始化变量的习惯有利于减少编程错误,提高程序质量。

      C++提供了构造和析构函数,其中构造函数就是为初始化而设计的;对于内置变量(char,int,long等)的初始化C++无能为力,其默认行为是未初始化,故其值依赖于变量类型(是否为static)和编译器。

      本文中将讨论两类基本变量:标量和数组,标量指单一变量,数组本质上就是一整块内存空间(别忘了memset)。其他数据结构均基于这两类基本变量,一般由库提供,比如著名的C++ STL容器。

 

声明时初始化的格式直接参见代码中的注释。

 

复制代码
 
 
1 #include < errno.h >
2 #include < math.h >
3 #include < stdio.h >
4 #include < stdlib.h >
5 #include < string .h >
6
7   void Print( int * buf, int len)
8 {
9 printf( " Value(int)= " );
10 for ( int i = 0 ; i < len; ++ i)
11 {
12 printf( " %d " , buf[i]);
13 }
14 printf( " \n " );
15 }
16
17   void Print( char * buf, int len)
18 {
19 printf( " Value(char)= " );
20 for ( int i = 0 ; i < len; ++ i)
21 {
22 printf( " %c " , buf[i]);
23 }
24 printf( " \n " );
25 }
26
27 int main( int argc, char ** argv)
28 {
29 printf( " scale variable:\n " );
30 // 1. scale variable
31 char v1; // not initialization. Value depends on compiler
32 Print( & v1, 1 );
33
34 char v2 = ' 1 ' ; // user initialization
35 Print( & v2, 1 );
36
37 char * v3 = new char ; // not initialization. Value depends on compiler
38 Print(v3, 1 );
39
40 char * v4 = new char (); // zeroing initialization. value is 0;
41 Print(v4, 1 );
42
43 char * v5 = new char ( ' A ' ); // user initialization
44 Print(v5, 1 );
45
46 int * i5 = new int ( 1243214 ); // user initialization
47 Print(i5, 1 );
48
49
50 printf( " array variable:\n " );
51 // 2. array
52 char a[ 10 ]; // not initialization. Value depends on compiler
53 Print(a, 10 );
54
55 char b[ 10 ] = {}; // same as {0}; zeroing initialization.
56 Print(b, 10 );
57
58 char b1[ 10 ] = { ' a ' }; // b[0]='a', other is 0!
59 Print(b1, 10 );
60
61 char * c = new char [ 10 ]; // not initialization. Value depends on compiler
62 Print(c, 10 );
63
64 char * d = new char [ 10 ](); // zeroing initialization. 追海逐风 证实,g++无此功能
65 Print(d, 10 );
66
67 // char* e = new char[10]('a'); // Error: ISO C++ forbids initialization in array new
68 // Print(e, 10);
69
70 return 0 ;
71 }
72
复制代码
本文转自 zhenjing 博客园博客,原文链接: http://www.cnblogs.com/zhenjing/archive/2010/10/12/1848616.html    ,如需转载请自行联系原作者

相关文章
|
2月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
49 0
|
17天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
60 30
|
2月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
24 1
|
22天前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
20 0
|
2月前
|
Dart API 开发工具
Dart ffi 使用问题之Dart API要在C++中使用,该如何初始化
Dart ffi 使用问题之Dart API要在C++中使用,该如何初始化
|
3月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
3月前
|
人工智能 分布式计算 Java
【C++入门 一 】学习C++背景、开启C++奇妙之旅
【C++入门 一 】学习C++背景、开启C++奇妙之旅
|
3月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
3月前
|
小程序 C++
【C++入门 二 】学习使用C++命名空间及其展开
【C++入门 二 】学习使用C++命名空间及其展开
|
3月前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
下一篇
无影云桌面