C语言的指针内容全篇

发布时间:2023-01-14 18:00

    前情提示:本篇博客的内容较多,阅读的时间可能会较长。而且图片也比较多,希望大家能够慢慢地、认真地看完,相信你一定会有收获的!!!

C语言的指针内容全篇_第1张图片

目录

一.指针初阶

1.内存

2.指针是什么

 3.指针的大小

4.指针和指针类型

5.野指针

6.指针运算

7.指针和数组

8.二级指针 

9.指针数组

二.指针进阶

          1.字符指针

2.指针数组

 3.数组指针

4.&数组名vs数组名

5.数组参数、指针参数

6.函数指针

7.函数指针数组

8.指向函数指针数组的指针

9.回调函数

10.自定义bubble_qsort函数

11.指针和数组笔试题解析

12.指针笔试题


一.指针初阶

1.内存

    内存是电脑中特别重要的存储器,计算机中程序的运行都是在内存中进行的。所以为了有效地使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。为了能够有效地访问内存中的每个单元,就给内存单元进行了编号,这些编号就被称为该内存单元的地址。

C语言的指针内容全篇_第2张图片

2.指针是什么

    其实指针就是地址。内存中的每个小的内存单元都有着自己的地址,为了方便找到我们想要的数据,我们可以定义一个指针变量来存放数据的地址。通过这个地址,我们就能很好地找到我们想要的数据。就好比,你的好朋友想来你宿舍找你,他只有知道你宿舍的门牌号(地址),才能更快地找到你。

    变量是在内存中创建的(在内存中分配空间),因为每个内存单元都有地址,所以变量也是有地址的。那怎么取出变量的地址呢?请看下方的代码。

 C语言的指针内容全篇_第3张图片

    如果我们用指针存放一个变量的地址,那么我们对指针进行解引用操作就可以修改这个变量的值了。

C语言的指针内容全篇_第4张图片

 3.指针的大小

    在32位的机器上,地址是32个0 or 1组成的二进制序列,则地址就得用4个字节的空间来存储,所以一个指针变量的大小为4个字节。 那如果在64位机器上,如果有64个地址线,那一个指针变量的大小是8个字节,才能存放一个地址。

4.指针和指针类型

    学习这个内容之前,我们先看一下下面的这个代码。

C语言的指针内容全篇_第5张图片

     我们可以看到,不管是什么类型指针,它们的大小都是4个字节。那跟类型有什么关系?类型好像没什么意义?我们是不是可以自己创建一直通用类型的指针呢?其实这样是行不通的,这也说明类型是有意义的。

C语言的指针内容全篇_第6张图片

C语言的指针内容全篇_第7张图片

C语言的指针内容全篇_第8张图片

C语言的指针内容全篇_第9张图片

    对比上面的四张图片,我们可以发现:当pa是整型指针的时候,对它解引用后它可以访问四个字节并将四个字节的数据改为了00;而当pa是字符指针的时候,对它解引用后它只能访问一个字节并将这个字节的数据改为了00。只是指针类型发生了变化,指针访问的权限大小就发生了变化。那么说明指针类型是有意义的。对整型指针进行解引用操作能访问4个字节,而对字符指针进行解引用操作只能访问1个字节。通过这个例子,我们就可以知道指针类型决定了指针解引用的权限。       那指针类型还有别的意义吗?其实还有,我们通过下面的代码来学习一下。

 C语言的指针内容全篇_第10张图片

     我们可以看到p和pc打印出来的地址是一样的,但是p+1和pc+1所打印出来的地址是不一样的。p+1的地址比p的地址多加了4,而pc+1的地址比pc的地址只多加了1。这是为什么呢?因为p是整型指针,整形指针+1跳过1个整型,也就是跳过4个字节;而pc是字符指针,字符指针+1跳过一个字符,也就是跳过1个字节。这也就是为什么p+1的地址比p的地址多加了4,而pc+1的地址比pc的地址只多加了1。那么指针类型的第二意义就是:指针类型决定了,指针走一步,能走多远。              那我们再通过对比下面的两个例子来加深对指针类型意义的了解!         

C语言的指针内容全篇_第11张图片

C语言的指针内容全篇_第12张图片

 C语言的指针内容全篇_第13张图片

C语言的指针内容全篇_第14张图片

     第一个程序中的p是整型指针,所以p+i表示跳过4*i个字节,指向数组第i+1个元素,然后通过解引用操作访问4个字节将数组中的元素改成0到9;而第二个程序中的p是字符指针,所以p+i表示跳过i个字节,而整型数据有四个字节,那么arr[0]就改成了0x03020100,对应的十进制数字为50462976.通过这两个代码的对比,我们就更能了解指针类型的意义。

5.野指针

  概念:指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)。

野指针成因

  • 指针未初始化

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号