关于C语言等程序中指针相关的问题

来源:互联网 发布:企鹅号矩阵绑定 编辑:程序博客网 时间:2024/05/16 10:23

       凡是学过编程的人,特别是从C起步的,都会去学习一个叫做指针的东西,而且好多人都会被卡在指针这里,觉得特别难以理解,不知道指针到底是一个什么东西,也不知道什么时候使用指针,什么时候不使用指针。

       其实指针并没有那么复杂,关键是要理解透彻。我们编写程序,不管是什么语言编程,无论是面向过程还是面向对象,程序最终都将被转换成机器语言被执行。而机器语言是怎样执行的呢,其实就是CPU不断的寻址,从内存中读取数据,进行运算。说道这里,就要详细讲解一下内存。我们程序的执行离不开硬件,内存是硬件中必不可少的,根据中央处理器的不同,内存被划分成一块一块,而且每一块内存都有自己的地址。这里以最简单的8位机为例,它的内存地址都是0x00001111这样的数字。我们在程序中定义一个常量或者变量,其实都是指向一个或几个内存块,举一个最简单的例子,int sum=32;这条语句就申请了一个内存空间,如图所示,假如说内存地址就是0x000这样(当然实际中不可能是这样)。我们定义了sum这个变量,实际上就是让sum等于0x000,当我们对sum这个变量进行操作的时候,比如sum+16或者sum++等,并不是操作sum或者说0x000这个数值,而是操作这个地址里边的东西。


        下边来说指针,一般我们定义指针,都要加一个* 号,比如int *p,这里就要注意了,这个表达式并不是int和*p,而是int * 和p,p依然是一个地址,如图p可以看做是0x006这块内存,只不过这个内存里存储的是一个地址,而不像

sum,sum里存储的是一个整形数据,p存储的是一个地址,这个存储的地址里边存放的是一个整形数据。再比如 

int **n,n依然只是一个地址0x008,只不过这个地址里边存放的是一个指针p。

        那么指针怎样操作呢,这里就要看实际情况了。是要操作数据还是要操作内存地址,比如说*p就要操作p地址里边存放的地址指向的内容,也就是说0x000中的内容,就是32这个数据。而p就是操作p地址里边的内容,也就是说操作0x000这个数据,依次类推,**n就是操作32这个数据,*n就是操作0x000这个数据,n就是操作0x006这个数据。这个大家就应该明白了,符号的不同就是操作的数据不同,但都是对数据进行操作。我们通常用p=&sum,实际上就是在p的地址里放入sum的地址这个数据,具体是要操作哪个数据,就要看实际需要了。

        到这里大家应该基本明白指针式怎么一回事了,也应该知道到底该怎么操作指针了。


0 0
原创粉丝点击