程序中的每个变量占有一个或多个字节内存,把第一个字节的地址称为变量的地址若访问第二个字节的地址会怎

2025-04-08 11:25:50
推荐回答(1个)
回答1:

11.1 指针变量

理解指针的第一步是在机器级上观察指针表示的内容。大多数现代计算机都将内存分割为字节(byte),每个字节可以存储8位的信息。

     

每个字节都有唯一的地址(address),用来和内存中的其他字节相区别。如果内存中有n个字节,那么可以把地址看作0~n 1的数。

      

可执行程序由代码(原始C程序中与语句对应的机器指令)和数据(原始程序中的变量)两部分构成。程序中的每个变量占有一个或多个字节内存,把第一个字节的地址称为是变量的地址。下图中,变量i占有地址为2000和2001的两个字节,所以变量i的地址是2000:

       

这就是指针的出处。虽然用数表示地址,但是地址的取值范围可能不同于整数的范围,所以一定不能用普通整型变量存储地址。但是,可以用特殊的指针变量(pointer variable)存储地址。在用指针变量p存储变量i的地址时,我们说p"指向"i。 换句话说,指针就是地址,而指针变量就是存储地址的变量。

本书的例子不再把地址显示为数,而采用更加简单的标记。为了说明指针变量p存储变量i的地址,将把p的内容显示为指向i的箭头:

        

指针变量的声明

对指针变量的声明与对普通变量的声明基本一样,唯一的不同就是必须在指针变量名字前放置星号:

int *p; 

上述声明说明p是指向int类型对象的指针变量。这里我们用术语对象来代替变量,是因为p可以指向不属于变量的内存区域(见第17章)。(注意,在第19章讨论程序设计时"对象"一词将有不同的含义)。

指针变量可以和其他变量一起出现在声明中:

int i, j, a[10], b[20], *p, *q; 

在这个例子中,i和j都是普通整型变量,a和b是整型数组,而p和q是指向整型对象的指针。

C语言要求每个指针变量只能指向一种特定类型(引用类型)的对象:

int *p      /* points only to integers   */ double *q   /* points only to doubles    */ char *r /* points only to characters     */ 

至于引用类型是什么类型则没有限制。事实上,指针变量甚至可以指向另一个指针,即指向指针的指针( 17.6节)。