这是个关于作用域的题目,本人有点绕晕了,麻烦教一下这个运行结果为什么是这样子的,谢谢
19条回答 默认 最新
- 专家-皆知 2024-11-05 16:00关注
以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。
在C++中,函数调用通常发生在声明函数之前,而不是声明函数之后。当一个函数被定义时,它将作为一个全局变量存储在一个特定的对象中。如果在定义函数的同时又声明了一个同名的函数,那么这个同名函数会被自动重命名,而它的名称会改变为原来的函数名。因此,当你使用
COUT
输出一个字符串时,实际上是在打印函数的一个引用,而不是直接访问到那个函数本身。以下是一个简单的例子:
#INCLUDE <IOSTREAM> INT MAIN() { STD::COUT << "HELLO, WORLD!" << STD::ENDL; RETURN 0; }
在这个例子中,
STD::COUT
是一个函数指针,它指向名为COUT
的函数。所以当我们调用COUT
时,实际上是调用了COUT
的引用,而不是直接访问到COUT
本身。如果你想要打印函数的一个引用(而不是直接访问到那个函数),你可以在定义函数时指定一个局部变量来存储函数的地址,并将其赋值给一个指针。例如:
VOID PRINTFUNCTION() { // 假设我们有一个名为PRINTFUNCTION的函数 VOID* PTR = &PRINTFUNCTION; // 将PTR赋值给指向PRINTFUNCTION的指针 // 在定义函数的同时声明另一个函数 INT ANOTHERFUNCTION(INT X) { // 这里可以写入任何需要的地方,比如打印X的值 RETURN X * 2; } // 调用PRINTFUNCTION INT RESULT = ANOTHERFUNCTION(3); STD::COUT << "THE RESULT IS: " << RESULT << STD::ENDL; // 使用PTR指向PRINTFUNCTION,然后打印其返回值 PTR--; } INT MAIN() { PRINTFUNCTION(); RETURN 0; }
在这个例子中,
ANOTHERFUNCTION
函数只是一个局部变量,但你可以通过调用PRINTFUNCTION
并传递它作为参数的方式来调用它。解决 无用评论 打赏 举报
悬赏问题
- ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
- ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出
- ¥18 关于#ubuntu#的问题:使用背景-工作职责内有七八台ubuntu系统的电脑,平时需要互相调取资料,想实现把这几台电脑用交换机组成一个局域网,来实现指定文件夹的互相调取和写入
- ¥20 求一个简易射频信号综测仪
- ¥15 esp8266 tally灯 接收端改为发射端
- ¥30 Labview代码调用access 数据库,相同代码其中一个调用不出来是为什么
- ¥15 基于51单片机的交通灯系统,找改程序有点急
- ¥15 java启动jar包后,运行过程中宕机
- ¥15 进行LM运算过程中出现了无法识别的问题,具体问题如下图
- ¥500 高有偿提问!求优化设计微信小程序