C语言基础

    返回首页    发表留言
本文作者:李德强
          第四节 地址与指针
 
 

        从这一节开始我们要学习C语言中最重要的一个机制——指针。指针是C语言的灵魂。想要学好指针,我们就要先从内存地址学起。

一、内存地址

        内存,实际上一可以存放很多字节数据的一个内部存储器。每一个存储单元为8个bit位,也就是一个字节byte,简写为B。这样多个存储单元线性的排列在一起,就构成了一定大小的存储空间。1024个字节为1KB,1024KB为1MB,而1024MB为1GB,1024GB为1TB等等。其实内存的本质就是由这样很多个字节所组成的存储单元。

        为了能让程序能够有效的访问这些内存,计算机为内存中的每一个字节进行编号,从0开始依次排列下去,这些编号是连续的,线性的,例如:

        这些为内存所编写的编号称为内存地址。在32位架构下计算机只有32根内存地址总线,所以CPU只能使用也就是4GB的内存地址,而在64位架构下计算机有64根内存地址总线所以能最后最多使用的内存地址。在32位系统下内存地址变量占4个字节,而64位系统下内存地址占8个字节。

 

二、指针变量

        接下来我们来看看指针变量,我们访问内存地址时,需要根据其内存地址来访问其所在的内存内容。C语言中提供了这样的方法可以通过内存地址来访问内存的内容。与其它基本变量类型一样,我们 可以定义一种指针类型的变量,这个所谓的指针就是一个普通变量,这个变量中存放的是一个内存地址,在定义指针变量时需要为其指针类型,例如:

char *p0;
short *p1;
int *p2;

        也就是说char *p0表示的是一个指向字符型变量的指针,short *p1表示的是一个指向短整形的指针。int *p2表示的是指向一个整型变量的指针。注意在这三个变量p0、p1和p2都是指针型变量,它们所占用的大小都是4个字节(在64位架构下占8个字节)。他们都是指针型变量,只不过它们所表示的分别是:所指向的内存地址中存放的变量类型分别为字符型变量、短整型变量和整型变量。

        我们可以通过&运算符对一个变量取其所在的内存地址,例如并同仁给相应的指针型变量,例如:

char ch = 'A';
short sh = 12;
int i = 234;
char *p_ch = &ch;
short *p_sh = &sh;
int *p_i = &i;

    这样在指针变量p_ch中就存放了变量ch的内存地址,也就是通过&符可以将ch变量的所在的内存地址取出来再通过=同仁赋值赋值给p_ch变量,同样p_sh中存放存入的是sh的地址,p_i中存放的是i的地址。得到这些内存地址之后就可以根据自己的需要对这个内存地址所在的变量做相应的操作,对地址取其变量的操作过程就是对变量取地址的逆操作,例如

char ch = 'A';
short sh = 12;
int i = 234;
printf("%d %d %d\n", ch, sh, i);

char *p_ch = &ch;
short *p_sh = &sh;
int *p_i = &i;
*p_ch = 1;
*p_sh = 2;
*p_i = 3;
printf("%d %d %d\n", ch, sh, i);

65 12 234
1 2 3

        可以看到我们通过&取地址操作就会将这几个变量的地址赋值给了指针变量,再通过*将指针变量取得变量操其内存地址区域的变量。

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号