C语言指针系列(1):初步了解C语言指针

让人抓狂的C语言指针


欢迎阅读我的博客
              阅读本文大约需要15分钟

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

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

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

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

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

在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。
由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为"指针"。意思是通过它能找到以它为地址的内存单元。

                                      参考文献:360百科

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

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


C语言与指针的关系

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

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

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

#include <stdio.h>
int main()
{
    unsigned x = 0X3F8CCCCD;

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

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

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

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

    return 0;
}

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


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

 #include <stdio.h>

int main()

{

    char *pt;

    char c='h';

    pt=&c;

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

}

程序运行结果如下:

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

嗯,这个就比较简单了。

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

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

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

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

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

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

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

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

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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_49591922/article/details/107573651