首页 > 编程知识 正文

c语言指针和数组,c语言指针通俗理解

时间:2023-05-05 12:26:28 阅读:137173 作者:1114

1.指针到底是什么

指针的实质就是个变量与常规变量没有任何本质区别相同。 指针的完整名称称为指针变量,应该只称为指针。

代码//a的本质其实是编译器中的符号,编译器中连接a和内存空间//的内存空间是a表示的变量。 int a; 定义//int类型变量,名称为aint *p; //定义了指针变量。 名称为p,p指向int型变量a=4。 //可操作p=4; //编译器不允许。 因为指针变量实质上也是普通变量,但其//用途与普通变量不同。 指针变量必须存储另一个变量的地址///,而不是存储任何int类型的数量。 p=(int* ) 4; //我知道其实是数字4,但是把类型转换为int *型的4//,相当于告诉编译器这4其实是地址,(而且是int型变量//的地址)的话,(int * ) 4是

2.为什么需要指针?

指针的出现是为了实现间接访问,间接存取(CPU的间接寻址)而在CPU设计时决定的,这决定了汇编语言可以实现间接寻址,汇编上的C语言也是简档寻址

3.指针使用三部曲:定义指针变量、关联指针变量、解引用

//演示指针的标准用法//指针的使用分为三个步骤。 指针变量的定义、指针变量的赋值(指针绑定)、取消引用int a=23在第一步中,定义指针变量int *p的printf(p=%p.n )、p ); //%p打印指针和%x打印指针,打印的值为相同的printf(p=0x%x.n ',p ); //第2步,绑定指针,实际上就是给指针变量赋值。 这意味着,除非//绑定指针变量以使指针指向另一个变量,否则无法取消引用该指针。 p=a; //实现指针绑定,使p指向变量AP=(int* ) 4; //实现指针的绑定,并且按照p指向存储器地址为4的变量//步骤3的方式,取消引用。 //如果在未将指针绑定到某个变量的情况下解析引用,则几乎一定会出现错误。 *p=555; //555放入p所指变量中

)1)如果我们假设int *p定义一个指针变量p时,则p为局部变量,所以c语言的局部变量的一般规律(在定义了局部变量且没有初始化的情况下,值是随机的) )

)2)这时,如果我们存储的是一个随机的数字,就相当于我们解引用p访问了。 由于不知道是否可以访问该空间,因此如果直接定义指针变量在不绑定有效地址的情况下解析引用,则可能会发生错误。

)3)定义指针变量,随机数字为地址的内存空间取消引用而不绑定有效地址。

)4)指针绑定的含义是指向可以访问、应该访问的位置。 指针的不能

解引用是为了间接访问目标变量

(1)野指针是指针指向4.什么是野指针?的位置的随机的、不正确的、没有明确限制

)2)如果指针变量在定义时没有初始化,则值也是随机的,运行时为

)3)由于野指针无法预测指向地址,因此无法预测段错误。

3种情况是指不可访问且操作系统不允许访问的敏感地址,如内核空间地址,从而导致触发器段错误。

第一种:(例如,我们曾经使用过但已经没有使用过的堆栈空间或堆空间)此时,程序的执行没有错误,也不会对当前的程序造成损害。

第二种是指向一个可用的、而且没什么特别意义的空间(例如,程序的变量x )的情况下,野指针的解引用正好修改这个变量x的值,这个变量被莫名其妙地变更,或者程序发生奇怪的错误的危险最大。

第三种情况就是指向了一个可用的空间,而且这个空间其实在程序中正在被使用

(1)野指针错误的发生源是定义既未初始化也未赋值,解除引用。 因此,在取消引用指针之前,请确保指针指向绝对可用的区域。

-定义指针时,同时初始化为空值

-在指针释放引用之前,确定此指针是否为空

-使用指针后,将其分配为空

-在使用指针之前,将分配绑定到可用的地址空间

int b,a=5; int *p=NULL; p=a; //正确使用指针的方法是在取消引用指针之前将if(null )绑定到绝对可用的地址!=p ) {b=*p; (}p=NULL; 请记住使用//指针变量,然后将其重新赋值为NULL(2)5.怎么避免野指针?。 然后,将指针代入空值。 实际上,指针指向在普通操作系统中无法访问的0地址。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。