C++类库

匿名 (未验证) 提交于 2019-12-02 23:52:01

include

using namespace std;

/
指针和引用:
指针:指向某一块内存的变量。其本身存储的信息就是内存地址的首地址,其类型决定指向内存的大小。
变量:某一块内存地址数据值的名字。
引用:已定义变量的别名。
比喻:
超市柜子:
1、第一排右数第三个--------------地址(指针)
2、柜子号为18--------------------变量名
3、18难记,谐音记忆为“要发”----引用
/

//指针(int、int&、int&、int&*、int**)
//以值交换为例
//int
void swap1(int a, int b) { //传进来的是形参
int tmp;
tmp = a;
a = b;
b = tmp;
}
void main01()
{
int a = 1, b = 2;
swap1(a, b);
cout << "a=" << a << endl;
cout << "b=" << b << endl; //交换失败,交换的是形参的值,无法达到交换的目的。
system("pause");
}
//小结:形参无法改变实参的值,指针却可以。
/
因为形参是实参传递给子函数的时候定义的一个新的变量,初始时值相等
用指针的时候,传递的不是值而是实参的地址,改变的就是实参的值。
/

//int
void swap2(int
a, int b) { //传递进来的是实参的地址
int tmp;
tmp =
a;
a = b;
b = tmp;
}
void main02()
{
int a = 1, b = 2;
swap2(&a, &b);
cout << "a=" << a << endl;
cout << "b=" << b << endl; //交换成功
system("pause");
}
//问题1:int
a与int* a有没有区别? 答:没区别。

//int&
void swap3(int& a, int& b) { //引用,传递进来的是实参
int tmp;
tmp = a;
a = b;
b = tmp;
}
void main03() {
int a = 1;
int b = 2;
swap3(a, b);
cout << "a=" << a << endl;
cout << "b=" << b << endl; //交换成功,引用即别名
system("pause");
}
//问题1:int &a与int& a有没有区别? 答:没区别。

//int&
void swap4(int
&a, int&b) { //传入的是a的地址,这里&a表示a的别名,其实还是一个东西。想想18和“要发”的关系
int tmp =
a; //里面操作和a一样,整体可以理解为超市的柜子号码18和“要发”的关系。
a = b; //传入的是别名的地址?
b = tmp;
}
void main() {
int a = 1;
int b = 2;

int *aPtr = &a;    //用aPtr存放a地址 int *bPtr = &b;     swap4(aPtr, bPtr);  cout << "a=" << a << endl; cout << "b=" << b << endl;   //交换成功 system("pause");

}

//int&
//void swap5(int &
a, int &b) {} //c++定义失败
//小结:没有&
a的形式

//int
void swap6(int
a, int b) { //目的都是要对实参进行操作,这里传入的是地址的地址
int tmp;
tmp =
a;
a = b;
**b = tmp;
}
void main06() {
int a = 1, b = 2;

int *aPtr = &a;  //存放变量a的地址   int *bPtr = &b;    int **aPtr2 = &aPtr;  //存放变量a的地址的地址 int **bPtr2 = &bPtr; swap6(aPtr2, bPtr2); cout << "a=" << a << endl; cout << "b=" << b << endl; system("pause");

}
/
问题1:地址不能直接存放给变量,即int b=&a。为什么?
答:进行某些操作时,如递增+1 需要的不是+1个,二是加1个整型变量,所以要用地址来进行操作。即
b=&a;。
小结:变量地址不能直接存放,需要通过指针来间接存放。 存放变量地址的格式: int a=&b;
/

/
总结:
1、void swap1(int a, int b)----------传入的是形参,无法对实参进行内存实际操作。
2、void swap2(int
a, int b)--------传入的是实参地址,可以对实参进行内存实际操作。
3、void swap3(int& a, int& b)--------引用的格式,传入的是实参的地址,可以对实参进行内存实际操作。相当于已经确定了实参,内部函数可以直接对实参进行操作,非特殊情况不需要加
或&。
4、void swap4(int &a, int&b)-------传入的是实参地址的指针,格式化操作:外部:存放地址:b=&a;内部:a
5、void swap5(int &a, int &b)------格式错误
6、void swap6(int a, int b)------传入的是地址的地址,格式化操作:外部:存放一地址:b=&a; 存放二地址:c=&b;内部:a;
要想对实参的内存进行操作,就要先锁定实参。然后根据格式改操作。
/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!