c语言指针要注意什么意思,C语言的指针,你真的理解了吗?

#c语言#

作为有“中级语言”之称的C语言,其与Java、python等语言最大的区别就是具有手动管理内存的机制。实现这个机制的就是指针。

什么是指针?简单来讲,C语言里的指针就是指的就是变量的地址,注意指针和指针变量的区别,指针变量的值通常是另外一个变量的地址,而指针本身就是变量地址的意思。注意指针变量和数组的区别,很多教材有提到数组名可以视作指针,但是大多数的都没有直接说明,数组名不是指针变量。如果我们对数组名进行取地址,会发现得到的值和数组名的值是一样的。

5ba8c6109a5211d59256b5c18369dc7e.png输出数组名和取地址的结果

原因是数组名在大多数情况会被隐式转换成指针变量,只有sizeof()和取地址时除外。了解这一点后,我们可以用数组名来理解指针。数组理解起来很容易,它就是内存上的一块连续的空间,而数组名就是这块空间的首地址。数组就像一个小区,而数组名就是这个小区1栋101的详细地址,向这个地址加1,就得到了1栋102的地址。而指针就是对这个地址的另外一种称呼,指针变量就是存储地址的变量,你可以把小区的任何一个门牌号对应的详细地址赋值给指针变量,然后通过使用解引用运算符"*",从而可以得到这个地址对应变量的具体数据,对于小区而言就是住户信息之类的。

自此,我们可以对“指针是变量的地址,指针变量是存储指针的变量”这一概念有一定程度的认识,下面我们使用实例来说明指针变量的作用。最经典的例子莫过于交换数字的函数了。

7a7f6b37879b747c4ca5e98ac1db9342.png利用指针变量实现整数变量交换

函数在传递参数的时候可以理解为用等号运算符把实际的参数(实参)传递给了形式上的参数(形参),假如上图的程序不使用指针或数组,则只是把实参的值传递给了形参,函数运行的结果就只交换了形参的值。而在上图中,通过指针变量,我们直接获得了形参的地址,因此可以直接操纵实参在内存上实际存储着的值,实现实参的数值交换,不过注意,调用该swap函数需要用类似swap(&a, &b)的形式,以将地址传递给形参,这也是scanf里的变量前面要加&的原因,因为我们要把scanf读取到的值实际传递给实参,实现读取的作用,因此实参变量应该用变量的地址而不是变量的值。数组和指针除外,因为其本身就是所指向变量的地址。除非你要输入的数据就是指针变量的数据,这时候指针变量前也需要加&,而数组名的值不可指定,就算你取数组名的地址,得到的仍然是数组名,因为数组名不是指针变量。

另外,对上面的例子,C语言有另外一种不用指针的实现方式,那就是利用宏。限于篇幅,我可能以后给大家讲讲

04d7b1119292a7e21852cc49078c3a28.png

举报/反馈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值