这一节的内容从我大一到现在就没学明白过,希望今天彻底搞懂!!!
引用 &p:就是给对象起了个别名或小名。
-
引用只能绑定在对象
上,而不能与字面值
或表达式的计算结果
绑定在一起。
-
引用必须初始化,且只能绑定一次。
#include<iostream>
using namespace std;
int main()
{
int a = 1,d;
int &b = a; //正确,b是a的别名
int &c; //错误,没有初始化
int &c=d;// 正确绑定在d上
b = 10;
cout << a << endl;// b的之变化,a也变化了
system("pause");
return 0;
}
指针 *p:想象它是一个低级任意门,只要知道地址就可以到想去的地方。
-
指针本身就是一个对象,可以赋值和拷贝,可以指向不同的对象。可以不用初始化,如果不初始化就是一个不确定的值。
#include<iostream>
using namespace std;
int main()
{
int *a, *b;//对,没初始化也没指向对象
int *p0=12;//错,初始化了,但是没指向对象。
int a1;
int *p1 = a1;//错,a1没有赋值
int b0 = 0;
int b1 = 10;
int *p2 = &b1;// 对,p2装着b1的地址,而且初始化了
int *p3 = p2;//对,没有初始化,但是p2的地址赋值给了p3
*p3 = 20;//对,*p3的值改成了20
int *p4;
p4 = &b0;
if (p4);//判断p4地址下的值,0为false,其他为ture
if (p2);//
p4 = p2;//对p2的地址赋值给了p4
cout << *p4 << endl;
system("pause");
return 0;
}
指向指针的指针 **p:想象它是一个高级任意门,只要知道低级任意门的地址就可以到那个低级任意门的地方。
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int *p = &a;//指向一个int型
int **p1 = &p;//指向一个int型指针
cout << **p1 << endl;
system("pause");
return 0;
}
const 限定符:不许动!!!
-
定义的值不能被改变
-
必须初始化
-
(1)const 初始化
#include<iostream>
using namespace std;
int main()
{
const int a = 10;//正确,初始化了
const int b = get();//正确,运行函数时初始化了
const int k;//错误,没有初始化
int c = 10;
const int c1 = c;//正确,将c的值赋给了c1
int d = c1;//正确,将c1的值赋给了d
system("pause");
return 0;
}
#include<iostream>
using namespace std;
int main()
{
const int a = 10;//正确,初始化了
const int &b = a;//正确
b = 0;//错误,常量不能改变值
int &c = a;//错误,非常量不能引用常量
int c = 10;
const int &c1 = c;//正确,引用一个非常量
c1 =0;//错误,c1的值不能改变
c = 0;//正确,
system("pause");
return 0;
}
-
(3)const 指针
-
有顶层const和底层const之分。
#include<iostream>
using namespace std;
int main()
{
int a = 0;
int *const p = &a;//正确,顶层,一直指向a
const int b = 10;
const int c = 30;
const int *p2 = &b;//正确,底层,
p2 = &c;//正确,可以改变p2
*p2 = 20;//错误,不能改变值
if (*p);//
*p = 10;//正确,可以改变*p的值
system("pause");
return 0;
}
总结:我还是晕晕的。。。。。
参考:C++primer 第五版
网友评论