非C系列的语言有没有指针,C语言指针系列(1):初步了解C语言指针

让人抓狂的C语言指针

237632955186e4c037558452fb62ad0b.gif

阅读本文大约需要15分钟

乍一听到“指针”这个名词的小伙伴,可能感觉云里雾绕的。感慨到,指针怎么能和c语言扯在一起呢?指针不是钟表上的吗?

其实他们想错了,此指针非彼指针。在C语言,指针的作用更像一把钥匙,每个变量单元都有自己的钥匙,也就是指针。

这是有的小伙伴又抱怨了,好不容易明白指针是什么东西,你这又一下子扯出来个变量单元,还能不能愉快的玩耍?

别着急嘛,慢慢讲。我要是没给你讲明白,你就直接给我寄刀片儿就行了。(那我估计以后可能会去卖废铁啦(╯#-_-)╯╧═╧)

言归正传,既然有的小伙伴已经提到了 “变量单元是什么”这一个问题,那我就给大家来简单说一下变量单元吧。

在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。

由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。

参考文献:360百科

在上述文字中,提及了变量单元这一个名词。我们不难发现,变量单元其实就是储存值的地方,每一个存储值的地方都有地址。

指针就是存储值的地方的地址,指针变量就是存储指针的变量。说到这里,大家可能恍然大明白了,但也可能有略微的不懂。没关系,我们继续讲。

C语言与指针的关系

经常有人认为,C语言为何至今仍然不衰,就是因为有指针。C语言灵活性能如此之高,不能全部归功于指针,但也有大部分功劳是靠指针。

在遇到一个问题时,指针往往能更加方便简洁的解决这个问题,虽然还有其他方法,但是不如指针来的方面。

比如说下面这个例子,将八进制数据强制性转换成浮点型数据——

#include

int main()

{

unsigned x = 0X3F8CCCCD;

float f1 = (float)x; //错误 ,转换的意义不正确

printf("%f\n", f1);

float f2 = *(float *)(&x); //正确,通过指针改变内存数据的意义

printf("%f\n", f2);

return 0;

}

看到这个例子时,许多同学已经开始修仙模式了……

d28181841deb5af9e231dc37489eb906.gif

咳咳,言归正传。上述程序确实可能有点儿超出了大家的知识范围,所以我特地准备了一个简单的,各位请看:——

#include

int main()

{

char *pt;

char c='h';

pt=&c;

printf("内存地址%X存储的值为:%c",pt,*pt);

}

程序运行结果如下:

内存地址F74EC7F7存储的值为:h

嗯,这个就比较简单了。

这个程序通过指针变量存储一个字符变量的地址,通过访问指针变量存储的地址而得到字符变量的值。

大家可能感觉这并没有什么卵用,但是这种想法是错的。

我们知道在开发一个复杂的程序时,需要声明各种函数,而且经常会传参。

在函数进行传参的时候,只是简单的将变量的值进行复制一下,在这个过程还需要开辟一个存储的内存空间,程序效率大大降低。

如果传入的是指针,那么只需要访问该指针所存储的地址就可以知道值,不需要再开辟一个另外的储存值的内存空间,这样使程序效率提高。

这也就是为什么c语言如此之强大,大部分归功于指针了。

现在大家可以理解c语言与指针的关系了,那就是…………

呃……那就是你必须要学他!

(你觉得我会说我忘词了吗?不,我不会。)

好啦,今天这章就先介绍到这里,明天本系列第二篇文章会介绍指针有何用处,以及c语言指针该如何用。

f77b1ff64c6231fcd06b40f6f6765335.gif

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值