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如果放在*的右边,修饰p
11.野指针的几种形式:首先我们先说一下野指针的成因
野指针成因:指针指向的内容,不属于当前程序时,这个指针就是野指针,相当于非法访问内存
1.指针未初始化
2.指针的越界访问

3.指针指向的空间释放
因为a被销毁了所以空间释放了
应避免返回局部变量的地址
比如:小明在一个酒店订一个房间,定了一晚上,第二天早上退房之后,告诉小李他在酒店订了一间房让小李来住,小李来了,肯定是不让住的,但他可以偷偷潜入进去住(这种情况下是:没有打印hehe,还没完全销毁)
11.assert 断言
使用#include<assert.h>的头文件
使用assert()如果()里面的成立则就当什么发生,继续执行下一项
如果()里面的不成立,则停止执行


12.区分形参和实参的不同
实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参

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

区分并理解:
传值调用;是传递数字并且数字在调用函数中不作改变
传址调用;是传递数字并且数字在调用函数中改变,需要传递地址
return只能返回一个值
1万+

被折叠的 条评论
为什么被折叠?



