C++常用注意事项

引用很容易与指针混淆,它们之间有三个主要的不同:

不存在空引用。引用必须连接到一块合法的内存。

一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。

引用必须在创建时被初始化。指针可以在任何时间被初始化。

例 :// 声明简单的变量 int i; double d;

            // 声明引用变量  int&    r = i;  double& s = d;

此处如果赋初始值则i的值就是r的值,d的值就是s的值,而&r和&s为它们的地址值。

> * 或&用法

&和*在C语言中的含义:&取地址,*取值。

&x是对x变量取地址,也就是返回的是x的地址。 int *i;这里面的*说明变量i是一个指针,存的是一个地址。

而printf("%d\n",*i);这里面的*的作用是返回指针i所指的变量。

&是取地址符号,既取得某一个变量的地址,如:&a;而* 是指针运算符(乘号就不说了),可以表示一个变量是指针类型搜索;也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值。

*两种,一种乘法 一种用于表示指针的内容;&两种 一种位与运算,一种是取变量地址.

三个函数只是形参不一样而已.

f(int s) //形参是s,int s表示:函数自己开设一个变量s存放传入的整型数值,以便函数内使用;

f(int *s)//形参是指针,int *s表示:函数开设一个指针变量s,存放传入的某变量的地址,函数内用*s的方法可访问这个变量单元,函数结束这个变量被舍弃;

f(int &s) //形参是引用,int &s表示:在调用函数时所给出的变量比如int a; f(a);这个变量在子程序中与变量a对应,改变s的值如同修改调用者变量a一样,视作同一单元的操作,也就是子程序通过变量名s直接访问调用者变量a。

cout、cerr 和 clog

通过小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用cout来进行一般程序数据输出,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。

下面是一种更简单的定义结构的方式,您可以为创建的类型取一个"别名"。

例如:

typedef struct{

 char title[50]; 

 char author[50];

 char subject[100]; 

 int book_id;}Books;

现在,您可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

Books Book1, Book2;

您可以使用 typedef 关键字来定义非结构类型,如下所示:

typedef long int *pint32;

pint32 x, y, z;

x, y 和 z 都是指向长整型 long int 的指针。


> C++:与::的区别?c++中冒号(:)和双冒号(::)的区别_genghaihua_新浪博客

1.冒号(:)用法

(1)表示机构内位域的定义(即该变量占几个bit空间)

typedef struct _XXX{

  unsigned char a:4;

  unsigned char c;

} ; XXX

(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。

struct _XXX{

  _XXX() : y(0xc0) {}

};

(3) public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。

(4)类名冒号后面的是用来定义类的继承。

class 派生类名 : 继承方式 基类名{

  派生类的成员

};

继承方式:public、private和protected,默认处理是public。

2.双冒号(::)用法

(1)表示“域操作符”

例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 

就要写成void A::f(),表示这个f()函数是类A的成员函数。

(2)直接用在全局函数前,表示是全局函数 

例:在VC里,你可以在调用API 函数里,在API函数名前加::

(3)表示引用成员函数及变量,作用域成员运算符

例:System::Math::Sqrt() 相当于System.Math.Sqrt()

VC中如下:

 ::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。

 :: 一般还有一种用法,就是直接用在全局函数前,表示是全局函数。当类的成员函数跟类外的一个全局函数同名时,考试,大提示在类内定义的时候,打此函数名默认调用的是本身的成员函数;如果要调用同名的全局函数时,就必须打上::以示区别。比如在VC里,你可以在调用API函数时,在API函数名前加::。


C++语言语法你应该知道的(基础篇) - CSDN博客

 http://blog.csdn.net/payshent/article/details/55254574

你可能感兴趣的:(C++常用注意事项)