编程的本质就是如何找到地址,取出数据,把数据传递给CPU相应的各种寄存器,经过运算,然后把结果传递到相应的存储区域。所以C语言从编程的角度来说,变量可以分为两类,一类是指针型(地址型)变量,另一类是普通变量(value值型变量) 好多人说,C语言的精华是指针,可是好多人就是不理解指针!看到一堆复杂的由*和小括号组成的指针就发晕,无法理解。这种问题产生的本质原因是你对地址型变量的指针的基本概念理解的不苟透彻。本文将帮您解开这个困惑,帮您走入C语言学习的大门。 指针的基本概念大部分人都会告诉你指针就是地址,其实这种理解是有些片面的,不够深刻。这也是大部分理解不够透彻的根本原因。 我们的回答是: 指针本质上是定义一种模型! 一个有效的指针变量一定会包含三个最重要的信息: 1、该指针所传递的地址值,说白了就是一个整数 int(32位平台,就是一个4字节的2进制整数),当然对该地址进行取*操作,就可以获得该地址上的所存的数据的值。 2、该指针变量所代表的的类型。学究一点的说法是该指针类型所标识的数据结构,这个结构是在定义指针变量的时候确定的。说的更通俗一点,就是该型指针标识的作用范围。就是该地址的值为起始地址,往后多少个字节是属于这个变量的数据。这一点尤其重要,经常会被忽视而搞晕。 3、该指针的名称。 我们先以最简单的基本类型为例,予以说明 int* p1;char* p2; p1定义了一个可以存储一个int 类型数据的指针变量,作用范围就是-sizeof(int)的长度,名字为p1。 p2定义了一个可以存储一个char类型数据的指针变量。作用范围就是一个字节的长度-sizeof(char) 见下图: 指针就像一个具有一定测量范围的游标卡尺 当我们把地址A0(假设地址)传递给P1后,该变量就会把指针指向该地址,然后根据自己所能管辖的范围,向后框住四个字节,然后取值,就是10300610.而且每次都是要固定的框住四个字节(因为p1是int 类型的指针)。 同理,对于p2来说,每次只能框住1个字节。当我们把地址A6传递给p2 时,得到的就是*p2=11 指针变量的运算int类型的数据,占用4个字节,本质配意思是这四个字节当做一个整体来看待,不能拆开。 当p1 做+n(整数)操作时,相当于指针地址指向需要整体移动4*n个字节单位。p2由于是char*类型的,每加1,代表向后移动一个字节,相应地址也+1。 如下图所示: 可见指针变量的加减操作就像是游标卡尺在左右滑动。所框的范围里面的值就是需要取得值。 |
|
来自: wenming044 > 《待分类》