指针学习总结

当指针本身定义的类型不同十,指向的一次性取值长度也不同

数组元素的指针

数组存放字符串

数组存放字符串时存放在栈区,sizeof(str1) ==128字节

字符指针指向字符串

str2此时存放的是h的地址,因此sizeof(str2) == 4字节或者8字节

并且文字常量区是只读的不允许赋值

指针数组

因此这样输出的单个字符

下面这样才能输出整个字符串

二维数组

数组指针

数组首元素地址和 数组首地址

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

数组首元素地址:&arr[0] == arr  ,arr+1 跳过一个元素 即4个字节的空间

数组的首地址:&arr   &arr+1 跳过整个数组即20个字节的空间

数组指针 :本质是指针变量 保存的是数组的首地址

int (*p)[5] =  NULL ;//数组指针p 可以保存int arr[5]这样数组首地址,sizeof(p)//44字节

注意:int *pr[5] ;//指针数组 每个元素都是int *

int (*p)[5] = &arr;

对数组首地址取* == 数组首元素地址   →*p == *&arr == arr

即 *(arr+2) == *(*p +2) ==*(*(p+0)+2) ==*(p[0] +2) == p[0][2]

数组指针的案例

int Arr[5] = {10,20,30,40,50};

int (*pt)[5] = &arr;//数组指针

cout<<*((int *)(pt+1) -2)<<endl;//40

因为pt+1 跳过整个数组,然后(int *) 优先级大于 - 所以pt+1 先被强制转为int * 然后才因此-2 就跳过8个字节所以指向40

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值