阿狸先森|一文让你学完C++,干货收藏( 五 )

<< "Error message : " << str << endl;}当上面的代码被编译和执行时 , 它会产生下列结果:
Error message : Unable to read....通过这些小实例 , 我们无法区分 cout、cerr 和 clog 的差异 , 但在编写和执行大型程序时 , 它们之间的差异就变得非常明显 。 所以良好的编程实践告诉我们 , 使用 cerr 流来显示错误消息 , 而其他的日志消息则使用 clog 流来输出 。
C++ 指针学习 C++ 的指针既简单又有趣 。 通过指针 , 可以简化一些 C++ 编程任务的执行 , 还有一些任务 , 如动态内存分配 , 没有指针是无法执行的 。 所以 , 想要成为一名优秀的 C++ 程序员 , 学习指针是很有必要的 。
每一个变量都有一个内存位置 , 每一个内存位置都定义了可使用连字号( int main (){intvar1;char var2[10];cout << "var1 变量的地址:";cout <当上面的代码被编译和执行时 , 它会产生下列结果:
var1 变量的地址:0xbfebd5c0var2 变量的地址:0xbfebd5b6通过上面的实例 , 我们了解了什么是内存地址以及如何访问它 。 接下来让我们看看什么是指针 。
什么是指针?指针是一个变量 , 其值为另一个变量的地址 , 即 , 内存位置的直接地址 。 就像其他变量或常量一样 , 必须在使用指针存储其他变量地址之前 , 对其进行声明 。 指针变量声明的一般形式为:
type *var-name;在这里 , type 是指针的基类型 , 它必须是一个有效的 C++ 数据类型 , var-name 是指针变量的名称 。 用来声明指针的星号 * 与乘法中使用的星号是相同的 。 但是 , 在这个语句中 , 星号是用来指定一个变量是指针 。 以下是有效的指针声明:
int *ip; /* 一个整型的指针 */double *dp; /* 一个 double 型的指针 */float *fp; /* 一个浮点型的指针 */char *ch; /* 一个字符型的指针 */所有指针的值的实际数据类型 , 不管是整型、浮点型、字符型 , 还是其他的数据类型 , 都是一样的 , 都是一个代表内存地址的长的十六进制数 。 不同数据类型的指针之间唯一的不同是 , 指针所指向的变量或常量的数据类型不同 。
C++ 中使用指针使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值 。 这些是通过使用一元运算符 *来返回位于操作数所指定地址的变量的值 。 下面的实例涉及到了这些操作:
实例
#include using namespace std; int main (){intvar = 20;// 实际变量的声明int*ip;// 指针变量的声明ip =// 在指针变量中存储 var 的地址cout << "Value of var variable: ";cout << var << endl;// 输出在指针变量中存储的地址cout << "Address stored in ip variable: ";cout << ip << endl;// 访问指针中地址的值cout << "Value of *ip variable: ";cout << *ip << endl;return 0;}当上面的代码被编译和执行时 , 它会产生下列结果:
Value of var variable: 20Address stored in ip variable: 0xbfc601acValue of *ip variable: 20C++ 引用引用变量是一个别名 , 也就是说 , 它是某个已存在变量的另一个名字 。 一旦把引用初始化为某个变量 , 就可以使用该引用名称或变量名称来指向变量 。
C++ 引用 vs 指针引用很容易与指针混淆 , 它们之间有三个主要的不同: