首页 > 编程 > C++ > 正文

C/C++【初级】之一 指针(*)、取地址(&)、解引用(*)与引用(&)的概念

2019-11-08 03:27:52
字体:
来源:转载
供稿:网友

1.引用注意事项:

1.引用必须被初始化; 2.引用一旦与初始值对象绑定,就不会变化(引用从一而终)!!! 3.引用初始值必须为一个对象,不能使常数 4.引用必须与被引用的对象类型一致

示例1:

/*—————————————————————————————— 示例01:关于 & 引用 ——————————————————————————————*/ int val = 100; int &refval1 = val; // &refval是引用,以i为别名 int &refval2 = refval1; // refval2与refval共同绑定在val上 //int &refval3; // error:引用必须初始化 //int &refval4 = 10 // error :引用的初始值必须为一个对象 //double dval = 3.14; //int &refval5 = dval; // error:引用必须与要引用的对象类型一致,应为int cout << "示例1:/n"; cout << "val: " << val << endl; cout << "refval1 = :" << refval1 << endl; cout << "&refval1 = :" << &refval1 << endl; cout << "refval2 = :" << refval2 << endl; cout << "&refval2 = :" << &refval2 << endl; cout << "/n"; refval2 = 10; // 给引用对象重新赋值 ,相当于给【val = 10】 赋值 cout << "val: " << val << endl; cout << "refval1 = :" << refval1 << endl; cout << "&refval1 = :" << &refval1 << endl; cout << "refval2 = :" << refval2 << endl; cout << "&refval2 = :" << &refval2 <<endl; cout << "/n"; cout << "refval1、refval2 都是引用的val的值,所以他们的地址相同" << endl; cout << "/n"; }

2.定义个简单的指针

指针注意事项: 1.避免声明一个指向NULL的指针;

string *ps; // 未初始化的指针 // 合法但危险

示例2:

/*—————————————————————————————— 示例02:关于 指针(*) ——————————————————————————————*/ int val2 = 100; int *ptr2 = &val2; // *ptr定义了一个int型的指针,指向了val所在的内存地址 cout << "示例2:/n"; PRintf("val2指针所在地址 16进制:%x",ptr2) ; cout << "/n";

3.指针(*)、取地址(&)、解引用(*)与引用(&)的概念

示例3:

/*—————————————————————————————— 示例03:关于 指针(*)、取地址(&)、解引用(*)与引用(&)的概念 ——————————————————————————————*/ int val3 = 100; int &value3 = val3; // 定义一个【引用】 int *ptr3 = &val3; // 定义一个【指针】 int *&refp3 = ptr3; //将一个【指针引用】和一个指针绑定起来,那么refp就是一个【指针引用 】 cout << "示例3:/n"; cout << "val3 的值: " << val3 << endl; cout << "value3 的值: " << value3 << endl; cout << "val3所指向的内存地址 &val3 : " << &val3 << endl; // 【取地址】 cout << "指针ptr3所指向的内存地址 ptr3 : " << ptr3 << endl; // cout << "对*ptr3指向的内容的取地址 &*ptr3: " << &*ptr3 << endl; // 【注意:ptr3 = &val3 = &*ptr3 】 cout << "获取指针ptr3指向地址的内容 *ptr3 : " << *ptr3 << endl; // 【解引用】 cout << "获取指针ptr3的地址 &ptr3 : " << &ptr3 << endl; cout << "/n" ; cout << "获取指针引用refp3 的地址 refp3 : "<< refp3 << endl; // 【指针引用refp】同样指向 cout << "/n" ; cout << " (&)取地址 和 (*)解引用* 互为反向操作因此,可以推理出,&*&*ptr依旧还是val的地址:/n" << &*&*ptr3 << endl;

重点:作用在引用上的所有操作事实上都是作用在该引用所绑定的对象上。

使用引用有何优点?

  在传参的时候,使用指针传参,编译器需要给指针另行分配存储单元,存储一个该指针的副本,在函数中对这个副本进行操作;而使用引用传参,编译器就不需要分配存储空间和保存副本了,函数将直接对实参进行操作。所以使用引用使得程序的运行速度更快,执行效率更高。

C++指针注意事项

C++指针详解

【C/C++学习】之一、指针和引用的区别

【C/C++学习】之十一、指针一些事

【C/C++学习】之十六、关于空指针NULL、野指针、通用指针


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选