引用很容易与指针混淆,它们之间有三个主要的不同:
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
例 :// 声明简单的变量 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函数名前加::。