制作:方斌 maino i int num; id Addr num|3000 scanf(%d", &num printf("num=%d\n", num C编译程序编译到该变量定义语句时,将变量num登录 到“符号表”中。符号表的关键属性有两个:一是“标识 名(id)”,二是该标识符在内存空间中的“地址 (addr)
制 作:方 斌 main() { int num; scanf("%d",&num); printf("num=%d\n", num); } C编译程序编译到该变量定义语句时,将变量num 登录 到“符号表”中。符号表的关键属性有两个:一是“标识 符名(id)” ,二是该标识符在内存空间中的“地址 (addr)” 。 id Addr num 3000
制作:方斌 为描述方便,假设系统分配给变量num的2字节存储单 元为3000和3001,则起始地址3000就是变量num在 内存中的地址。 ●变量值的存取——通过变量在内存中的地址进行 系统执行“ scanf("%d",&num);”和 “ printf("num=%dn,num);时,存取变量num值的方 式可以有两种
制 作:方 斌 ⚫ 为描述方便,假设系统分配给变量num的2字节存储单 元为 3000 和3001,则起始地址3000就是变量num在 内存中的地址。 ⚫ 变量值的存取──通过变量在内存中的地址进行 ⚫ 系统执行 “ scanf(”%d“,&num);” 和 “printf(”num=%d\n“, num);”时,存取变量num值的方 式可以有两种:
制作:方斌 (1)直接访问一直接利用变量的地址进行存取 上例中 scanf(“%d",&num)的执行过程是这样的 用变量名num作为索引值,检索符号表,找到变量 num的起始地址3000:;然后将键盘输入的值(假设为 3)送到内存单元3000和3001中。此时,变量num在 内存中的地址和值,如图所示。 2998300030023004
制 作:方 斌 3 2998 3000 3002 3004 (1)直接访问──直接利用变量的地址进行存取 上例中scanf(“%d”,&num)的执行过程是这样的: 用变量名num作为索引值,检索符号表,找到变量 num的起始地址3000;然后将键盘输入的值(假设为 3)送到内存单元3000和3001中。此时,变量num在 内存中的地址和值,如图所示
制作:方斌 printf("num=%dn",num)的执行过程,与 scanf0很相 似:首先找到变量num的起始地址3000,然后从3000 和3001中取出其值,最后将它输出 ●接访问一通过另一变量访问该变量的值 C语言规定:在程序中可以定义一种特殊的变量(称 为指针变量),用来存放其它变量的地址
制 作:方 斌 ⚫ printf("num=%d\n",num)的执行过程,与scanf()很相 似:首先找到变量num的起始地址3000,然后从3000 和3001中取出其值,最后将它输出。 ⚫ 间接访问──通过另一变量访问该变量的值 ⚫ C语言规定:在程序中可以定义一种特殊的变量(称 为指针变量),用来存放其它变量的地址
制作:方斌 指针变量 如图所示:假设定义一个这样的变量p(当然 该变量也有自己在内存中的地址2002),我 们用该变量来存储另一个变量的地址,即把变 量a的内存地址1012(当然是a所占据存储单 元的首地址)存放到变量p中 1012 20022003 101101210131014
制 作:方 斌 指针变量 ⚫ 如图所示:假设定义一个这样的变量p(当然 该变量也有自己在内存中的地址2002),我 们用该变量来存储另一个变量的地址,即把变 量a的内存地址1012(当然是a所占据存储单 元的首地址)存放到变量p中。 1012