深入理解指针2

1.数组名的理解

一般情况下,数组名就是首元素的地址,但是有两个特殊情况。

  • sizeof(数组名),sizeof中单独放数组名,这里的数组表示整个数组,计算的是整个数组的大小
  • &数组名,这里的数组表示整个数组,取出的是整个数组的地址。(整个数组的地址和首元素的地址是有区别的)

接下来,我们谈arr和&arr的区别

因为&arr[0]和arr都表示首元素的地址,所以他们+1是跳过4个字节

而&arr是表示整个数组的地址,所以他+1是挑个整个数组的字节即40个

2.使用指针访问数组

arr[i]表示以arr为起始地址去访问下表为i的元素

arr[i]==*(arr+i),但是真正访问的时候仍然是找到位置的偏移,然后再解引用。

同时,*(i+arr)==i[arr]因为加法支持交换律

小结:i[arr]==*(i+arr)==*(arr+i)==arr[i]

3.一维数组传参的本质

也就是说,数组传参的时候,传递的并非是整个数组,而是数组首元素的地址

所以再求一个数组的元素个数是,要在他没传参之前的主函数求得。

4.冒泡排序

·优化后的冒泡排序

5.二级指针

二级指针是用来存放一级指针的地址的

对于二级指针的运算有:

  • *ppa通过对ppa中的地址解引用,这样找到的是pa,
int b=20;
*ppa=&b;//即pa=&b
  • **ppa得到的是a
    **ppa=30;
    //等价于*pa=30;
    //等价于a=30;

    6.指针数组

进行类比:整形数组int arr[9],是存放整形的数组;字符数组char ch[5],用来存放字符的数组;

SO,指针数组是用来存放指针的数组

指针数组的每个元素都是用来存放地址的

指针数组的每个元素都是地址,同时又可以指向一块区域

7.指针数组模拟二维数组

(模拟出二维数组的结果,但并不是二位数组本身,因为他不是连续的)

parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型一维数组,parr[i][j]就是一位数组中的元素。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值