浅析C语言指针

2020-08-15 13:33宋志飞
商情 2020年34期
关键词:指针C语言内存

【摘要】文章从C语言指针的基本概念入手,引出C语言指针、指针变量等多个知识点。并对程序中应用C语言指针中较常出现的几个错误进行分析讲解。

【关键词】C语言  指针  内存

0引言

指针的英文是pointer,是C语言中一个非常重要甚至可以说是C语言的精髓,是C语言的一个重要标识,提到C语言,我们就会想到指针。指针是C语言受欢迎的一个重要原因,C语言也是目前非常流行的计算机程序语言。指针和数组、函数等之间数据的交互有着非常重要的关联。在一些特殊情形下,只能用指针才能完成相应的运算,同时,指针提高了代码运行的效率。

同时,指针又是C语言中最为复杂难学的知识点之一,若对指针的要点混淆不清,滥用或者误用指针,将会减少程序的可读性;错误运用的话,将会使程序编译出错甚至崩溃。

1指针

根据C语言教程中提高的冯诺依曼理论,C语言程序代码编译运行的时候是要写入内存单元。要想完全掌握指针的话,首先要理解内存的概念,这其中包括:内存单元、地址等概念。这里面提到的内存是由很多空间大小相同的存储单元组成。我们可以形象的将计算机的内存设定成一个街道上的一间间相邻的门面,每间门面都有唯一的门牌号码来标识来区分。C语言中,变量的值存储在计算机的内存中,每个变量都对应占据一个 的位置。每个内存位置都是有地址唯一确定并引用的,就好像街道上门面房都是由它们的门牌一样。指针实际上是地址的另一个名称。C语言提供了一部分操作符,通过这些操作符,能够得到变量的地址,还可以经过指针变量直接得到它所指向的值。

由int类型变量的值为整数,char类型变量的值为字符,我们能够想到,指针从本质上看,指针是一个值为内存地址的变量,或者说指针变量的值是地址。

2指针变量

这里我们先声明一个指向整型变量的指针的语句:“int *p;”,p是一个指针,这个好理解,p只不过是一个变量而已,与我们知道的整型变量、字符型变量等并没有什么区别。我们使用“int *p”声明一个指针变量,实质上是在内存中声明一个一段宽度的内存空间,并将其命名为p。p和整型变量、字符型变量等没有实质区别。我们还有这样的语句:“p=&i;”, &叫做取地址符,就是返回变量i的地址编号。或者说,整句的含义就是将i的地址的编号赋值给p,即在p中写上了i的地址编号,假设i的地址编号是6,变量i的值是30。

执行完p=&i之后,在内存中,p的值是6,这里的6就是变量i的地址编号,p就指向了变量i。因此,我们称p为指针,我们这里要记住,指针变量的存储的内容就是内存的地址编号。我们这里又有如下语句:“printf(”%d”,*p);”,我们这里可以这样去读它:p的内容所指的地址的内容,或者形象的理解成p门牌号碼上所对应的房子。P的内容是6,也可以说p指向内存编号为6 的地址。*p就是它所指地址的内容,即地址编外为6上的内容了,就是30这个内容了。所以运行程序,在屏幕上就会打印输出30。我们可以将“printf(”%d”,*p);”理解成“printf(”%d”,i);”这样就不难理解指针变量这个概念了。

3指针的作用

指针到底有什么作用呢?指针能够间接访问变量,也可以提升代码的访问效率,还能够实现动态内存分配等。C语言编译器在编译的时候,代码中的变量、函数等都要对其分配内存,因此,程序代码一旦开始运行了,就会直接找到对应的内存单元和地址。C语言中的指针,实质上就是对底层内存单元的操作。

指针能够通过间接访问这个特性来解决这些问题。举例子,在函数间是不可以共享数据的,但是有了指针后,就能够间接用到函数之外的数据,即将数据的地址传递到函数中就可以了。

使用指针,能够让开发者在底层或者抽象层与内存进行打交道,更加高效直接。能够化解很多直接访问无法完成的操作。比如:像函数直接的数据分享、返回值不可以是相同的的一个值以上等很多问题。还有后面要学到的对文件的操作就离不开指针的应用。

使用指针能够将逻辑关系上有联系的数据、函数关联起来。例如,后面要学到的 链表内容中,存储不连续的数据但在逻辑上有关系的,就要用到指针的内容。

4总结

C语言的指针,使用起来非常灵活,在实际运用中变化很多。对于初学者来说,有点难度,但对于完全掌握C语言指针的人来说,就能够将指针运用到实际的应用中,写出优秀的程序代码,实现很多其他计算机语言无法实现的功能。指针的学习要不断理解和实践,不断的去挖掘其精髓,从而完全掌握C语言的精髓。

参考文献:

[1]Stephen Prata, C Primer Plus(第6版)中文版[M].北京:人民邮电出版社, 2016.4.

[2]谭浩强,C 语言设计[M].北京:清华大学出版社,2000.[3]GregPerry.写给大家看的C语言书[M].人民邮电出版社,2010.

作者简介:宋志飞(1985-),汉族,男,安徽太湖人,讲师,硕士研究生,主要从事蚁群算法及应用、计算机软件及应用、职业教育等方面的研究。

猜你喜欢
指针C语言内存
隐超DDR5 5600AOFRUS DDFR55200 16GBx2内存套装实战
“C语言程序设计”课程混合教学探索
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
郊游
基于C语言的计算机软件编程技术探究
中职C语言单片机课堂教学中的趣味性探讨
为什么表的指针都按照顺时针方向转动
计算机原理中C语言的应用价值
内存搭配DDR4、DDR3L还是DDR3?
浅析C语言指针