程序清单9.7 twofile2.cpp// twofile2.cpp -- variables with internal and external linkage#include <tostr

文章讨论了C++中的变量链接性(内部和外部)、作用域,以及静态局部变量的概念。通过程序清单9.7和9.8实例,展示了如何处理函数调用间的变量状态和使用静态局部变量处理行输入。
摘要由CSDN通过智能技术生成

程序清单9.7 twofile2.cpp
// twofile2.cpp -- variables with internal and external linkage
#include <tostream>
extern int tom:
static int dick = 10:
int harry - 200:

// tom defined elsewhere
// overrides external dick
// external variable definition.
// no conflict with twofilel harry

void remote_access ()

using namespace std:
cout << "remote_access()reports the following addresses: \n":
cout << stom << " = &tom. " << &dick << " = sdick, ";
cout << sharry << " = tharry\n":

下面是编译程序清单9.6和9.7生成的程序的输出:
main(}reports the following addresses:
0x0041a020 = &tom. 0x0041a024 = &dick, 0x0041a028 - &harry
remote access(lreports the following addresses:
Dx0041a020 = stom. 0x0041a450 = &dick, 0x0041a454 - sharry
从上述地址可知,这两个文件使用了同一个tom变量,但使用了不同的dick和harry变量。具体的地
址和格式可能随系统而异,但两个tom变量的地址将相同,而两个dick和harry变量的地址不同。

4. 静态存储持续性、无链接性
全此,我们介绍了链接性分别为内部和外部、作用域为整个文件的变量。接下来介绍静态持续家族中
的第个成员 -- 无链接性的局部变量。这种变量是这样创建的,将static 限定符用于在代码块中定义的
变量。在代码块中使用 static时,将导致局部变量的存储持续性为静态的。这意味着虽然该变量只在该代
码块中可用,但它在该代码块不处于活动状态时仍然存在。因此在两次函数调用之间,静态局部变量的值
将保持不变(静态变量适用于再生 -- 可以用它们将瑞士银行的秘密账号传递到下一个要去的地方)。另外,
如果初始化了静态局部变量,则程序只在启动时进行一次初始化。以后再调用函数时,将不会像自动变量
那样再次被初始化。程序清单9.8说明了这几点。
该程序演示了一种处理行输入可能长于目标数组的方法。前面讲过,cin.get(input, ArSize)方法将
·直读取输入,直到到达行尾或读取了ArSize-1个字符为止。它把换行符留在输入队列中。该程序读取行
输入后的字符。如果是换行符,则说明整行被读取:否则说明行中还有字符没有被读取。随后,程序使用
-个循环来丢弃余下的字符,不过读者可以修改代码,让下 -- 轮输入读取行中余下的字符。该程序还利用
了这样一个事实,即试图使用get(char*,int)读取空行将导致cin为false。

程序清单9.8 static.cpp
// static.cpp -- using a static local variable
Ainclude <iostream>
// constants
const int ArSize = 10:

// function prototype
void strcount (const char * str):

int main[)

using namespace std:
char input [ArSize]:
char next:

cout << "Enter a line: \n":
cin.get (input, ArSize):

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值