C++ 指针运算符(& 和 *) 终于讲明白了

C++ 指针运算符(& 和 *) | 菜鸟教程

C++ 指针运算符(& 和 *)

正在上传…重新上传取消 C++ 运算符

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。

取地址运算符 &

& 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。

您可以把 & 运算符读作"取地址运算符",这意味着,&var 读作"var 的地址"。

间接寻址运算符 *

第二个运算符是间接寻址运算符 *,它是 & 运算符的补充。* 是一元运算符,返回操作数所指定地址的变量的值。

请看下面的实例,理解这两种运算符的用法。

实例

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var;
   int  *ptr;
   int  val;

   var = 3000;

   // 获取 var 的地址
   ptr = &var;

   // 获取 ptr 的值
   val = *ptr;
   cout << "Value of var :" << var << endl;
   cout << "Value of ptr :" << ptr << endl;
   cout << "Value of val :" << val << endl;

   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of var :3000
Value of ptr :0xbff64494
Value of val :3000

正在上传…重新上传取消 C++ 运算符

 C++ 存储类

C++ 循环

2 篇笔记 写笔记

  1.    123

      273***4334@qq.com

    106

    调用时变量前加 "&" -------返回该变量的地址

    声明时变量前加 "基本类型 *" -------该指针变量表示另一个普通变量的地址   eg:int * 或 char *

    调用时变量前加 "*"-------表示取该地址的内容

    声明时变量前加 "基本类型 **"-------该二级指针变量表示另一个一级"基本类型 *"指针变量地址   

    123

       123

      273***4334@qq.com

    2年前 (2019-10-12)
  2.    hievery1

      hie***y1@126.com

    56

    声明时,变量前加 "基本类型 &" :声明引用变量。它是某个已存在变量的别名,即该引用变量名称与原始变量名称都代表同一个变量。

    声明时,变量前加 "基本类型 *" :声明指针变量。它的值是另一个变量的地址

    声明时,变量前加 "基本类型 **":声明二级指针变量。它的值是另一个一级"基本类型 *"指针变量的地址  (指针的指针)。

    调用时,变量前加 "&" :使用取地址运算符获取该变量的地址

    调用时,指针变量前加 "*" :使用间接寻址运算符获取该指针变量所指向的变量

    调用时,二级指针变量前加 "**" :获取该二级指针变量所指向的指针所指向的变量

    示例:

    #include <iostream>
    using namespace std; 
    int main(){
        int  var;     // 声明int类型变量var
        int * ptr;    // 声明指针变量ptr
        ptr = &var;   // 先使用 & 运算符获取变量var的地址,再把该地址赋值给指针变量ptr
        int ** pptr;  // 声明二级指针变量pptr
        pptr = &ptr;  // 先使用 & 运算符获取变量ptr的地址,再把该地址赋值给二级指针变量pptr
        int & ref1 = var;   // 声明引用变量ref1, ref1是变量var的别名(引用必须在创建时被初始化)
        int & ref2 = *ptr;  // 先使用*运算符获取指针变量ptr所指向的变量(即var),再用该变量(var)初始化引用变量ref2(声明引用变量ref2的同时对它进行初始化)。也就是说,该行代码执行后,ref2也是变量var的别名 var = 20
        cout << "Value of var: "; 
        cout << var << endl; 
        cout << "Value of &var: "; 
        cout << &var << "\t(var的地址)" << endl; 
        cout << endl; 
        cout << "Value of ptr: "; 
        cout << ptr << "\t(等于&var)" << endl; 
        cout << "Value of *ptr: "; 
        cout << *ptr << "\t\t(等于var)" << endl; 
        cout << "Value of &ptr: "; 
        cout << &ptr << "\t(ptr的地址)" << endl; 
        cout << endl; 
        cout << "Value of pptr: "; 
        cout << pptr << "\t(等于&ptr)" << endl; 
        cout << "Value of *pptr: "; 
        cout << *pptr << "\t(等于ptr, 等于&var)" << endl; 
        cout << "Value of **pptr: "; 
        cout << **pptr << "\t\t(等于*ptr, 等于var)" << endl; 
        cout << "Value of &pptr: "; 
        cout << &pptr << "\t(pptr的地址)" << endl; 
        cout << endl; 
        cout << "Value of ref1: "; 
        cout << ref1 << "\t\t(等于var)" << endl; 
        cout << "Value of &ref1: "; 
        cout << &ref1 << "\t(等于&var)" << endl; 
        cout << endl; 
        cout << "Value of ref2: "; 
        cout << ref2 << "\t\t(等于var)" << endl; 
        cout << "Value of &ref2: "; 
        cout << &ref2 << "\t(等于&var)" << endl; 
        return 0; 
    }

    输出结果:

    Value of var: 20
    Value of &var: 0x7ffce63490bc    (var的地址)
    
    Value of ptr: 0x7ffce63490bc    (等于&var)
    Value of *ptr: 20        (等于var)
    Value of &ptr: 0x7ffce63490b0    (ptr的地址)
    
    Value of pptr: 0x7ffce63490b0    (等于&ptr)
    Value of *pptr: 0x7ffce63490bc    (等于ptr, 等于&var)
    Value of **pptr: 20        (等于*ptr, 等于var)
    Value of &pptr: 0x7ffce63490a8    (pptr的地址)
    
    Value of ref1: 20        (等于var)
    Value of &ref1: 0x7ffce63490bc    (等于&var)
    
    Value of ref2: 20        (等于var)
    Value of &ref2: 0x7ffce63490bc    (等于&var)
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值