视频字幕
同学们好!今天我们学习C语言指针。先问个问题:如何写一个函数直接交换主函数里两个变量的值?用普通参数传递做不到,因为传递的是值的副本。指针就能解决这个问题!我们的学习路径分5步:理解内存地址、学习指针定义、掌握内存结构、学习基本语法、最后通过实战案例掌握变量交换。
现在开始第1步:理解内存和变量地址。想象计算机内存就像一个巨大的抽屉柜,每个抽屉都有唯一的编号,这就是地址。当我们声明变量int a等于10时,系统会找一个抽屉,给它起名叫a,把值10放进去。这个抽屉的地址比如是0x1001。我们可以通过变量名a访问值10,也可以通过地址0x1001找到这个抽屉。
第2步:指针是什么。指针是一种特殊的变量,与普通变量不同。普通变量存储的是数据值,比如int a等于10,变量a里面存的就是10这个数字。而指针变量存储的是另一个变量的地址。声明指针的语法是int星号p,表示p是一个指向int类型变量的指针。指针的作用是通过地址找到变量,间接访问和修改变量,实现函数间的数据共享。
第3步:通过内存结构图理解指针。假设变量int a等于10存储在地址0x1001,指针int星号p等于&a存储在地址0x2005。在内存表中可以看到:变量a的地址是0x1001,内容是10;指针p的地址是0x2005,但它的内容是0x1001,也就是变量a的地址。这样p就指向了a。当我们写星号p时,就是解引用操作,通过指针p找到地址0x1001,获取那里存储的值10。
同学们,老师先问大家一个问题:如何让一个函数修改主函数中的变量?比如我们想写一个交换函数swap(a,b),让它能够交换主函数中a和b的值。用传统的参数传递方法,只能传值,无法修改原变量。今天学习的指针就能够解决这个问题!指针让函数可以直接操作内存中的数据。
好,要学习指针这个内容,咱们一共有5步。第1步,咱们学习指针概念,大家能够理解什么是指针。第2步,咱们学习内存原理,大家能够理解内存地址。第3步,咱们学习内存结构图,大家能够可视化理解指针。第4步,咱们学习指针语法,大家能够写出指针代码。第5步,咱们学习实战案例,大家能够用指针解决实际问题。
好,咱们现在开始,首先来看第1步和第2步。指针是一个变量,它存储另一个变量的内存地址。程序运行时,变量存储在内存中,每个内存位置都有唯一的地址。指针变量存储的就是这个地址。通过内存结构图可以看到,变量a存储在地址0x1000,指针p存储在0x1008,它的值指向变量a的地址。通过指针可以找到变量在内存中的位置,直接访问和修改变量的值。
第3步是内存结构图详解。变量a存储在地址0x1000,值为10。指针p存储在地址0x1008,它的值是0x1000,也就是变量a的地址。通过箭头可以看到p指向a。关键操作有两个:p等于&a表示取a的地址赋给p,星号p等于20表示通过指针修改a的值。这样我们就能通过指针间接操作变量了。
第4步语法和第5步实战案例。指针的基本语法:声明用int星号p,初始化用p等于&a,解引用用星号p。实战案例是变量交换函数。函数接收两个指针参数px和py,通过三步完成交换:第一步用temp保存星号px的值,第二步让星号px等于星号py,第三步让星号py等于temp。调用时传递变量地址swap(&a, &b)。这样就成功交换了主函数中a和b的值,解决了开始提出的问题。指针让函数能够直接操作外部变量!
同学们,现在这个知识点讲完了,咱们先来看下目标达成没有?我们成功用指针解决了函数修改外部变量的问题。现在咱们一起回顾一下重点、难点、易错点。重点是指针是存储地址的变量,&取地址,星号解引用,指针让函数能修改外部变量。难点是理解地址和值的区别,星号的两种用法。易错点是忘记初始化指针,混淆星号p和p的含义。核心步骤是声明、初始化、操作。指针让C语言具有强大的内存操作能力!