指针变量与内存地址解析

hello,各位小伙伴们大家好!

今天给大家分享一下我在开始学习指针时自己的感悟与理解!!!

1.首先给大家简单说一下int a=10;的含义

变量的创建都需要向内存中申请空间,但每次地址的编号都不一样

怎样把地址存放起来哪?需要我们引用指针变量,指针变量用来存放地址的

存放地址有什么用哪?运用解引用操作符根据指针变量从地址那里找到原数

这里打印a和打印*pc结果是一样的,都是'w'

&和 *一来一回

*p是可以被改变的

2.下面来看这张图,这又是为什么哪?

指针变量用来存放地址的

指针变量的大小只要能存放的下一个地址就行

那么在x86(32位环境下),一个地址的大小是32个比特位==4个字节,所以在32位环境下

,指针变量的大小是4个字节

X64(64位环境下),一个地址的大小是64个比特位==8个字节,所以在64位环境下

,指针变量的大小是8个字节

3.理解int *pa=&a的含义

int是指a是整数类型,*指指针指向pa

4.我们会想2.中指针存放字节的大小都一样,有必要再分int,char,short....哪?

其实是有必要的,当我们让地址加1时,是根据类型的大小来加的,如果我们把关于int 的类型用char的指针,虽然能放下,但是如果加1,就只能跳过1个字节,但如果用int指针,加1,那么跳过四个字节

如图所示:

5.void*        强制类型转化

6.因为数组在内存中是连续存放的,只要知道一个元素的内存,就能顺藤摸瓜的找到后面的所有元素,数组中的地址是从小到大排序的

可通过4.中地址加1来使地址发生变化,推测出下一个地址,找到存放的数字,打印出来

&arr[0]是首元素的地址

arr是首元素的地址,只有sizeof和 &数组名   中表示一个数组,其他情况表示首元素地址7.指针减指针相当于地址减地址

得到的是中间的个数

可用于求字符串中字符的个数8.写一个函数,求字符串的长度

不用指针做法:

指针做法:9.打印数组的所有元素

10.变量的修改

无指针的:

有指针的:

const 如果放在*的左边,修饰*p

const如果放在*的右边,修饰p11.野指针的几种形式:首先我们先说一下野指针的成因  

野指针成因:指针指向的内容,不属于当前程序时,这个指针就是野指针,相当于非法访问内存

1.指针未初始化

2.指针的越界访问

3.指针指向的空间释放

因为a被销毁了所以空间释放了

应避免返回局部变量的地址

比如:小明在一个酒店订一个房间,定了一晚上,第二天早上退房之后,告诉小李他在酒店订了一间房让小李来住,小李来了,肯定是不让住的,但他可以偷偷潜入进去住(这种情况下是:没有打印hehe,还没完全销毁)

11.assert 断言

使用#include<assert.h>的头文件

使用assert()如果()里面的成立则就当什么发生,继续执行下一项

如果()里面的不成立,则停止执行

12.区分形参和实参的不同                        

实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参

这个方法不成立,我们需要换一个思路,通过指针可以找到一个数,相当于跟着味找实物


区分并理解:

传值调用;是传递数字并且数字在调用函数中不作改变

传址调用;是传递数字并且数字在调用函数中改变,需要传递地址

return只能返回一个值

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值