c++的引用(&,用在定义变量时候),指针,取地址符号(&)

int a = 7;
//a的引用,就是一个别名
int &reference = a;
//a的指针
int *point_a = &a;
//指针point_a的指针,一个二维指针
int **point_point_a=&point_a;

int b[] = {1, 2};
//数组b的指针,指向第一个元素
int *point_b = b;

 

内存块中只有 0x????(地址值) 和 ?(数值)这两种情况,里面是地址值就是指针变量,里面是数值就是普通变量

每一个变量都有类型,比如int变量,double变量,int指针变量,int指针的指针变量

以后说指针脑子想到的是里面是个地址值,二维指针也是,其实java也有指针(Student s=new Student((),这个s里面存着就是地址值)


&用在哪个内存块就出来一个这个内存块的地址值(唯独用在数组名字这种int *出来的地址值不是这样)


  • b[0]是int,内存里面存着一个数值
  • b和&b[0](同一个东西)是int *,内存里面存着一个地址值,指向数组第一个数值
  • &b是int (*)[2],内存里面存着一个地址值(值跟b相同),代表一个长度为2的int数组(因为不是指针无法前面加*无法取到指向的东西)

 

  • b+1/&b[0]+1(&b[0]是0x61fe00,那么&b[0]+1就是0x61fe04)
  • &b+1跳过整个数组(&b是0x61fe00,那么&b+1是0x61fe14)

*(&b):这种地址值前面加个*,cout出来还是地址值,而*b和*(&b[0])会正常cout出他们指向的内容

*(int *)(&b):强行转化为一个int *,这样值不变,前面加*就可以访问到它指向的数组第一个数值了


int c[2][3] = {1, 2, 3, 4, 5, 6};

补充一个二维的

  • c[0][0]是int,内存里面存着一个数值
  • c[0]是int *,内存里面存着一个地址值,指向{1,2,3}(c[0]与c值相同)
  • c是int (*)[3],内存里面存着一个地址值(值和c[0]相同),代表一个长度为3的int数组
  • &c是int (*)[2][3],内存里面存着一个地址值(值和c[0]相同),代表一个长2宽3的int二维数组


个人总结笔记,可能有错误

部分参考至:https://blog.csdn.net/wang13342322203/article/details/85228415

https://blog.csdn.net/boulders/article/details/78191373

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值