在上文中函数scanf()就是使用地址做为参数。更通常地,当须要改变调用函数中的某个数值时,任何被调用的无返回值的C函数都须要使用地址参数来完成该任务。函数
一元运算符&能够取得变量的存储地址。假设pooh是一个变动的名称,那么&pooh就是该变量的地址。一个变量的地址能够看做是该变量在内存中的位置。假定使用了下面的语句:code
pooh = 24;内存
而且假定pooh的存储地址是0B76(PC的地址通常以4位十六进制的形式表示)。那么语句:io
printf("%d %p",pooh,&pooh);class
将输出以下数值:变量
24 0B76object
在程序清单9.12中,咱们使用地址运算符得到不一样函数中具备相同名称的变量的存储地址。程序
程序清单9.12 loccheck.c程序 /*loccheck.c --查看变量的存储地址*/ #include <stdio.h> void mikado (int); /*声明函数*/ int main (void) { int pooh = 2,bah = 5; /*main()函数中的局部变量*/ printf("In main(),pooh = %d and &pooh = %p\n",pooh,&pooh); printf("In main(),bah = %d and &bah = %p\n",bah,&bah); mikado(pooh); return 0; } void mikado(int bah) /*定义常量*/ { int pooh = 10; /*mikdo()函数中的局部变量*/ printf("In mikado(),pooh = %d and %pooh=%p\n",pooh,&pooh); printf("In mikado(),bah = %d and &bah = %p\n",bah,&bah); }
上述输出结果说明了如下问题:首先,两个pooh变量具备不一样的地址,两个bah变量也是如此。所以,正如咱们所料,计算机会把它们看做4个独立的变量。其次,函数调用mikado(pooh)确实把实际参数(main()中的pooh)的数值2传递给了形式参数(mikado()中的bah)。须要注意的是这种传递只是进行了数值传递,两个变量(main()中的pooh和mikado()中的bah)仍分别保持原来的特性。
每个C函数都使用本身的变量。这么作更可取,由于它可使原变量不因被调函数中操做的反作用而意外的被改变。 计算机