我们在学习C语言的时候,是不是觉得指针这章节“巨简单”,一听就会,一写就废。如果你们也有这样的烦恼,那我觉得这件事太酷啦。
不管我们要学习什么,都要先去了解它的概念,所以第一步。
哈哈,不过话又说回来了,
1.概念
>1 声明指针:可以通过在变量名前添加 *
符号来声明一个指针变量。例如,int *ptr;
声明了一个指向整数类型的指针变量 ptr
。
>2 取址操作符 &
:使用 &
符号,可以获取变量的地址。例如,int num = 10;
,那么 &num
表示变量 num
的地址。
>3 解引用操作符 *
:使用 *
符号,可以访问指针所指向的内存位置的值。例如,int *ptr = #
,那么 *ptr
表示指针 ptr
所指向的内存位置存储的值。
>4 空指针:空指针是一个特殊的指针值,表示指针不指向任何有效的内存位置。在C语言中,可以使用 NULL
宏来表示空指针。
>5 指针算术:指针可以进行算术运算,如指针加法、减法。这样可以在内存中移动指针的位置。
没想到吧,指针也是可以进行算术运算的,不过最好是指向同一块空间的指针,不然它们的加减没有意义。
>6 动态内存分配:使用 malloc()
函数可以在运行时动态地分配内存空间。通过分配内存,可以创建具有可变大小的数组和数据结构。使用完后,应该用 free()
函数释放已分配的内存。
是不是看着依旧很迷惑呢,那我们不妨举一个生活中的例子,
想象一个楼房,知道你想不到,那么再想一下,你的好朋友住在这栋楼里面,你要去找他玩,你能通过什么去确认他的房间,然后找到他呢,没错,就是房间号。那么指针也是一样的道理,不过指针指向的是内存空间中的地址
是不是看起来很简单呢。那我们既然认识了指针,那肯定有很过同学就好奇了,指针有什么用呢
,
这么说吧,数组能做的事情,我指针基本都能做,数组不能做的事情,我指针依旧可以做,这就是我。废话也说这么多了,没人说我水文字了吧,那我们直接上代码吧。
我想这时候有人就会有疑惑了,为什么都是*号,可表示的内容确实不同呢。其实也是很容易理解的,可以分为三种情况。
1.声明指针变量: 在声明变量时,星号用来表示该变量是一个指针。
》也就是我们的int *pointer = &number;这颗*号的含义
2.解引用操作符: 在使用指针时,星号用作解引用操作符,用来访问指针所指向的内存地址处的值。
》与之对应的 printf("%d\n", *pointer);也就是这颗*号
3.指针运算乘法: 在一些情况下,星号也可以表示指针运算中的乘法操作。例如,如果你有一个指向数组开头的指针,你可以使用指针加上一个偏移量来访问数组中的元素,这个偏移量将会与指针的大小相乘。
》这种情况下的指针是我们最难理解的,但也是应用最为广泛的。多的不唠,我们直接看代码。
这只是一个简单的对指针的运算,看懂了吧,那我就相信你们懂了哦!
既然会了,那我们不妨秒几道题,练练手呢。我先给大家打个样,
是不是看的,多做几道就能看懂啦,
相信聪明如你,拿下这些题目必然不在话下,那不妨试试这几道。
这期我们就到这里,希望这篇文章对你有所帮助,我们下期再见。