hans

hans

【C++】C++ 一些基础小Tips


前言#

记录一下小 tips,方便查阅和巩固基础知识。

1. 引用 &,指针 *,取地址符 &#

引用 & 是 C++ 的新概念。

取地址符 & 是得到某一变量的地址信息。

指针指向一块内存,它的内容是所指内存的地址。引用是某块内存的别名。

引用必须在定义时被初始化,而且只能初始化一次,之后不可变。指针可变。

引用不能为空,指针可以为空。

以下是 “值传递” 示例程序。由于 Func1 函数体内的 x 是外部变量 n 的一份拷贝,改变 x 的值不会影响 n,所以 n 的值仍然是 0。

void Func1(int x)
{
    x = x+10;
}
int n = 0;
Func1(n);
cout << "n=" << n << endl;
//输出n = 0

以下是 “指针传递” 的示例程序。由于 Func2 函数体内的 x 是指向外部变量 n 的指针,改变该指针的内容将导致 n 的值改变,所以 n 的值成为 10。

void Func2(int* x)
{
    (*x) = (*x) + 10; // *作用是去指针(解引用),x本身表示n的地址信息。
}
int n = 0;
Func2(&n);//这里&是取地址符
cout<<"n="<<n<<endl;
//输出n=10

以下是 “引用传递” 的示例程序。由于 Func3 函数体内的 x 是外部变量 n 的引用,x 和 n 是同一个东西,改变 x 等于改变 n,所以 n 的值成为 10。

void Func3(int &x)
{
    x = x+10;
}
int n = 0;
Func3(n);
cout<<"n="<<n<<endl;
//输出n=10

指针可以被重新赋值以指向另一个不同的对象。引用总是指向在初始化时被指定的对象。

string s1("Nancy");
string s2("Clancy");

string& rs = s1; // rs引用s1
string *ps = &s1; // ps 指向s1

rs = s2; // rs仍旧引用s1,但是s1的值现在是“Clancy”
ps = &s2; // ps 现在指向s2

2. 箭头(->)和点号(.)操作符#

对于一个结构或者类,如果定义其对象的时候是指针,就要用 "->" 指向类成员或者结构元素。

当定义一般对象的时候就要用 "." 指向类成员或者结构元素。

对于结构:

struct MyStruct
{
    int menber_a;
};

MyStruct s;
s.member_a = 1;

MtStruct *ps;
(*ps).member_a = 1;
ps->member_a = 2;

对于类:

class A
{
    public
    play();
}

A *p;
p->play();

A p;
p.play();

2. 位运算符 & | <<>> ^ ~ %#

http://blog.csdn.net/fox64194167/article/details/20692645

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。