概述
-
- 指针
先定义一个int类型的a,然后定义一个指针p 指向 a 的地址 ,再定义一个指向a的二重指针q,指向p的地址。
int a = 10;
int *p = &a; // int *p; p = &a; so *p == 10; p == &a;
cout<<" &a is "<<&a<<endl; //&a is 0x22fe3c a 在内存 中的地址
cout<<" p is "<<p<<endl; // p is 0x22fe3c p 是 a 的地址 cout<<" &p is "<<&p<<endl; // &p is 0x22fe30 p也是一个变量,要给它分配空间
cout<<" *p is "<<*p<<endl;// *p is 10
int **q; //a 的 二次指针 q = &p;
cout<<" &q is "<<&q<<endl;// q 在内存的地址 ,q也是一个变量,要给它分配空间 &q is 0x22fe28
cout<<" q is "<<q<<endl; // q 是 p在内存的地址 q is 0x22fe30 cout<<" *q is "<<*q<<endl; // a 在内存的地址 *q is 0x22fe3c -----------
引用
定义一个int变量a,然后用a1来引用a,实际上a1的内存地址就是a
int a = 10;
int &a1 = a;
cout<<" a is "<<a<<endl; // a is 10
cout<<" &a is "<<&a<<endl;// &a is 0x22fe34
cout<<" &a1 is "<<&a1<<endl; // &a1 is 0x22fe34 a1就是a的别名
int b = 64;
a1 = b;
cout<<" a1 is "<<a1<<endl; //a1 is 64
cout<<" &a1 is "<<&a1<<endl;// &a1 is 0x22fe34
cout<<" b is "<<&b<<endl;//b is 0x22fe30
cout<<" a is "<<a<<endl; // a is 64 改变a1等于改变a ----------
const用法
- 1.定义常量变量,这样这个变量在后面就不可以再被修改
const int a = 10;
a = 2;//错误,不可被修改
2.传参时参数不被修改, 引用传递则函数外部传进来的变量的值也发生改变
void f1(const int &a)
{ a = 4; //error }
void f2(int &a) { a= 4; //no error }
3.const a = 3;
int b = a;//为a分配内存
int c = a;//不在分配内存
const定义的变量,系统只为它分配一次内存,而使用#define定义的常量宏,能分配好多次;
4. C++中一个类中使用const来修饰函数 防止修改非static类成员变量
class { public: void fun() const //加const修饰
{ a = 10; //出错,不可修改非static变量
b = 10; //对,可以修改
}
private:
int a ;
static int b;
}
5. int a = 10;
int *const a1 = &a;
const int *a2 = &a;
只有一个const 远远相配,近者在一起 如果const在表达式最左边,则最右边的数据为常量,剩下的为变量
如果const在表达式中间,则距离它最近的那个为常量不可变,剩下那个为变量
有2个const: const修饰指针变量时:指针和数据都为常量不可变。
最后
以上就是傻傻秋天为你收集整理的指针 与 引用 还有const的全部内容,希望文章能够帮你解决指针 与 引用 还有const所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复