文档章节

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

idreamo
 idreamo
发布于 2016/07/15 05:38
字数 569
阅读 22
收藏 0

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

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第9章 函数 9.7 指针简介

一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。 正如char类型的变量用字符作为其数值,而int类型变量的数值是整数,指针变量的数值表示的是地址。 如果您将某个指...

idreamo
2016/07/15
38
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

tony关东升
2018/06/26
0
0
关东升的《《从零开始学Swift》即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》《从零开始学Swift》将在《Swift开发指南》第1版的基础上添加Swift2.0的...

智捷课堂
2015/08/17
109
0
【C++】第12章 类和动态内存分配 知识点总结

《C++ Primer Plus》第12章知识点总结 在构造函数中使用new时应注意的事项 (1)如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete (2)new和delete必须互相兼容。new...

qq_37792173
2017/11/27
0
0
关东升的《从零开始学Swift》第2版已经出版

关东升的《从零开始学Swift》第2版已经出版 大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版《从零开始学Swift》 《从零开始学Swift》将在《...

tony关东升
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
38分钟前
6
0
jQuery load() 方法实现加载远程数据

jQuery load() 方法是简单但强大的 AJAX 方法。load() 方法从服务器加载数据,并把返回的数据放入被选元素中。 语法: $(selector).load(URL,data,callback);必需的 URL 参数规定您希望加载的...

前端老手
39分钟前
5
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
47分钟前
9
0
怎样在磁盘上查找MySQL表的大小?这里有答案

我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应...

Linux就该这么学
今天
5
0
Redis

一、Redis支持的几种数据类型:字符串、List、SET、HASH、ZSET 二、Redis的缓存技术主要是为了降低关系数据库的负载并减少网站成本 三、在Redis里面,被MULTI命令和EXEC命令包围的所有命令会...

BobwithB
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部