c语言之指针初阶

目录

1. 指针是什么

2. 指针和指针类型

3. 野指针

4. 指针运算



        1: 指针是什么

        其实指针的本质就是地址,为了我们能够更好的利用内存空间,于是我们会给内存,划分为1个1个的单元格,且这些单元格的单位是字节,且每个字节的空间都对应一个地址,这些地址就是为了我们能够更好地通过地址找到内存,然后再来利用内存。比如我们用具体的列子来说明:

在32位机器下,我们知道有32根高低电平线,1/0(高电平,低电平),这32个地址线,最多能产生2^32个地址,其大小就为2^32Byte的大小等于4GB,所以在32位机器下,我们的指针只能管理4GB的内存,在64位机器下,指针能管理8GB的内存,所以指针的大小分别为4个字节,与8个字节的大小。

2指针与指针类型:

1:指针变量

        指针变量顾名思义,是用来存放指针的,他是一个地址,我们可以通过一个数的地址,来找到地址里面的内容,下面我们通过具体的代码来讲解:>      

2:指针类型:我们通过图来讲解

相信不少小伙伴有这样的疑问,既然在32位机器下,指针的大小都是4个字节,且能管理内存中的地址那为啥还要区别类型呢?

有这个疑问我们就得继续往下看了,在此之前,我们不得不讲一下野指针这个概念了

3:野指针

        在网上:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

        顾名思义野指针就是指指针所指向的地方是非法的,不能够使用的,是未经允许操作的

        下面我们来介绍几种情况,属于野指针的范围

                1:指针未初始化

                未初始化,会导致指针随机赋值,也就会导致指针在内存中随机指向内存,而当我们使用指针的时候,就会出现非法访问,随机使用我们内存中的空间:    

2:指针的越界访问:

        这个很容易出现bug,特别当我们使用数组的时候,我们来举例说明一下:

 

3:指针所指向的空间被释放:

 那么如何避免野指针呢?

1. 指针初始化

2. 小心指针越界

3. 指针指向空间释放,及时置NULL

4. 避免返回局部变量的地址

5. 指针使用之前检查有效性

在定义指针的时候我们就应该想好指针指向哪里,然后小心越界,

4:指针的运算

        1指针+(-)整数的运算

        表示的是指针向后移动一个数据类型的地址,比如说,我们是int* 的指针那我们就向后移动一个整形变量的大小的空间,而我们开辟时候就给a开辟了四个字节的空间,那么就刚好跳过一个整形的空间指向下一个数,而我们在使用char*型的指针,就只能访问1个字节的空间

2 指针-指针(当两个指针进行运算的时候,我们只能进行相减的运算)

且表示两个地址之间所含有的元素

且指针-指针的前提条件是,两个指针指向了同一块空间,因为不知道两者之间差了多少个元素,导致运算结果算不出来。

        本次的文章到这里就结束了,谢谢大家的耐心观看。

        

猜你喜欢

转载自blog.csdn.net/2201_75964502/article/details/130713283