C Primer Plus 第9章 函数 9.5 地址运算符:&

原创
2016/07/15 05:38
阅读数 59

在上文中函数scanf()就是使用地址作为参数。更一般地,当需要改变调用函数中的某个数值时,任何被调用的无返回值的C函数都需要使用地址参数来完成该任务。

一元运算符&可以取得变量的存储地址。假设pooh是一个变更的名称,那么&pooh就是该变量的地址。一个变量的地址可以看作是该变量在内存中的位置。假定使用了下面的语句:

pooh = 24;

并且假定pooh的存储地址是0B76(PC的地址一般以4位十六进制的形式表示)。那么语句:

printf("%d %p",pooh,&pooh);

将输出如下数值:

24 0B76

在程序清单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函数都使用自己的变量。这么做更可取,因为它可以使原变量不因被调函数中操作的副作用而意外的被改变。                                                                        

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部