C++Note 指针和地址 -> & . .指针的指针

  a->b    的含义是       (*a).b

地址:在计算机存储器中每个存储单元都有一串连续的编号,这些编号,称为地址。

例如,定义一个变量的时候,如:

 1 int a; 

这条语句是在内存中申请 sizeof(int) = 4个字节的内存空间

可能如图:

 因此执行如下代码:

std::cout<<&a;

对于上面存储地址输出的结果就是

0x11223354

对于数组而言,当声明的时候,内存地址是连续的

int a[2];

内存分配可能如图:

 执行如下代码:

std::cout << &a[0];    //输出a[0]元素对应地址
std::cout << '\n';
std::cout << &a[1];   //输出a[1]元素对应地址

结果就是:

0x11223354

0x11223358

拓展一下,在数组中,数组名代表的是该数组的首地址,也就是与a[0]一致

std::cout << a;
std::cout << '\n';
std::cout << &a[0];
std::cout<<'\n';
std::cout << &a[1];

结果为:

0x11223354

0x11223354

0x11223358

2、地址[i] = 该地址对应值

int a[2]={1,2};
std::cout<<a[1];//地址[i]=该地址对应值

结果为:

2

3、*地址 = 地址对应值

等同于:地址[0]

int a[2]={1,2};
std::cout<<*a;  

结果为:1

【关于&符号】

&符号,在C++中有很多作用,可以是:

1.逻辑与:&&

2.位运算与:&

3.求地址运算符

4.引用

求地址运算符:

int a;
std::cout<<&a;

上面代码应该输出一串变量地址,如:

0x11223341

表示变量a所在内存单元地址;

引用:

其实引用特别容易和指针内容混淆,那什么是引用?

 引用其实是给变量a取了另外一个名字b,那么当对变量b执行操作,a也会受影响,类似大小名

复制代码
 1 #include <iostream>
 2 
 3 void Yinyong(int &b) //&在这里叫引用,b是一个引用变量,当执行这段函数的时候,b,其实就是a的“小名”
 4 {
 5     b = 0;    //b=0(a=0)
 6 }
 7 
 8 int main()
 9 {
10     int a = 9;
11     Yinyong(a);
12     std::cout << a<<'\n';
13     system("pause");
14     return 0;
15     
16 }
复制代码

 类似如下方法也是引用:

复制代码
#include <iostream>
int main()
{
    int i;// 声明引用变量
    int& r = i;                    
    i = 5;                                  
    std::cout << "i : " << i << std::endl;
    std::cout << "r: " << r <<std:: endl;
    return 0;
    
}
复制代码

结果如:

【指针】

指针的核心,也就是地址的运用

指针就是存储地址的变量,当指针参与运算的时候,指针就是其内部的地址。

当给指针变量赋值以后,指针变量本质就是一个地址

参考引用:https://blog.csdn.net/Lightinf/article/details/84329133

指针的指针

复制代码
 1 void test()
 2 {
 3     int a = 10;
 4     int* b = &a;
 5     int** c = &b;
 6     cout << a << endl;//10
 7     cout << &a << endl;//a的地址
 8     cout << b << endl;//a的地址
 9     cout << *b << endl;//10
10     cout << c << endl;//b的地址
11     cout << *c << endl;//a的地址
12     cout << **c << endl;//10
13 }
复制代码

posted on   廿陆  阅读(11)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示