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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)