美文网首页
C++常用注意事项

C++常用注意事项

作者: Amanda_Lhy | 来源:发表于2018-04-09 10:52 被阅读0次

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

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

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

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

    例 :// 声明简单的变量 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++常用注意事项

          本文链接:https://www.haomeiwen.com/subject/btpbhftx.html