大家晚上好呀,今天要给大家分享的依然是我们的指针的基础知识,指针这个模块我感觉太难了,所以我可能要分得很细,所以指针这个模块可能还得搞什么4.0,5.0 ,,,
好的,下面进行今天的指针基础知识分享。
前面我们有讲过导致野指针的原因,和野指针的危害是很大的,一旦修改了一些系统的重要值就会令系统崩溃,所以大家在用代码是一定要规避野指针,规避野指针的方法有,1,当你实在不知道要赋什么值(地址)给指针时,你可以赋值NULL,(指针的0),2,检查是否有越界使用指针,比如你定义的是一个长度为10的数组,你让一个指针去访问一个11的地址这样就会导致越界,有造成系统崩溃的风险,所以我们在使用指针时一定要注意范围。
然后还有一种很隐晦的野指针方式
如图
你定义了一个test 的函数,因为要返回的是一个地址,所以我们把test定义为一个指针型的函数,然后在主函数那里用一个指针*p接受这个返回地址,如果这时候我们想对这个地址里的数重新赋值一个数,会怎么样呢?会有的问题,因为我们说调用的函数test 里的a赋值为10,它的作用域是只在那个test 函数,一旦你返回了这个a地址,就结束了,这一块空间就会还给系统,然后系统把这个空间给了别人,但是你又把地址给了主函数,甚至想要赋值来改变它,在不同的编译器就会有错误。
再看我们指针的运算,我们可以这样
什么意思呢,就是说,可以通过指针+-一个整数从而实现对不同地址的访问。
比如这一段循环
因为这个数组有10个元素,然后如果我们要通过指针进行访问数组元素(不用数组下标)就可以通过这样p=p+1,实现,但是要注意这个时候我们访问的是里面的值要用%d,不用%p(这个是打印地址)
好啦,今天的分享就到此结束,我们明天见。