教科书上的例题看不懂 菜鸟级 还请各位大虾多多相助

wwcn1987 2008-12-17 12:13:33
#include<iostream.h>
void func();
int n=1;
void main()
{
static int a;
int b=-10;
cout<<"a:"<<a
<<"b:"<<b
<<"n:"<<n<<endl;
b+=4;
func();
cout<<"a:"<<a
<<"b:"<<b
<<"n:"<<n<<endl;
n+=10;
func();
}
void func()
{static int a=2;
int b=5;
a+=2;
n+=12;
b+=5;
cout<<"a:"<<a
<<"b:"<<a
<<"n:"<<n<<endl;}
运行结果为:
a:0 b:-10 n:1
a:4 b:10 n:13
a:0 b:-6 n:13
a:6 b:10 n:35
1.首先只cout了三组
结果怎么会是四组
2.第一组结果尚能看懂 一个是没有初始化的静态变量a,c++自动为其初始化为0,一个是定义的局部变量b=10,一个是全局变量n=1,到第二组结果怎么a就变成4了,b怎么就变成10了,n怎么就变成13了,从这以下的结果都看不懂了 分数不多 还请热心的大虾能帮助详细的讲解一下
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbh2001 2008-12-17
  • 打赏
  • 举报
回复
1. func()调用了两次,所有四次输出
2. func内的局部变量会隐藏外部的同名变量,所以func内访问的是func内的变量
注意n是全局的,且func内无同名变量,其他的自己看看,很简单
帮你排版了一下,规范,看的舒服一点

#include <iostream>
using namespace std;

void func();
int n = 1;
int main(void)
{
static int a;
int b = -10;
cout << "a: " << a
<< " b: " << b
<< " n: " << n << endl;
b += 4;
func();
cout << "a: " << a
<< " b: " << b
<< " n: " << n <<endl;
n += 10;
func();

return 0;
}

void func(void)
{
static int a = 2;
int b = 5;
a += 2;
n += 12;
b += 5;
cout << "a: " << a
<< " b: " << b
<< " n: " << n << endl;
}

Neves_pa 2008-12-17
  • 打赏
  • 举报
回复
main()里面的a,b是main()的变量,
len()里面的a,b是len()的变量,在你的程序里他们是不相干的,并没有值的传递,只是名称相同而已.
Neves_pa 2008-12-17
  • 打赏
  • 举报
回复
...
我不是大虾~
但我想说的是楼主你写的程序格式相当的不规范啊!
当然是打印出四组啦,你调用了两次fun()函数,每一次调用一次都打印一组出来嘛,再加上main()函数中的两次,一共就是4次啦.

liusichen_0 2008-12-17
  • 打赏
  • 举报
回复
只有n是全局的,程序中有两个a和两个b,条理清晰就很清楚了
wwcn1987 2008-12-17
  • 打赏
  • 举报
回复
大致明白了 谢谢各位
nullah 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lbh2001 的回复:]
1. func()调用了两次,所有四次输出
2. func内的局部变量会隐藏外部的同名变量,所以func内访问的是func内的变量
注意n是全局的,且func内无同名变量,其他的自己看看,很简单
帮你排版了一下,规范,看的舒服一点

C/C++ code
#include <iostream>
using namespace std;

void func();
int n = 1;
int main(void)
{
static int a;
int b = -10;
cout << "a: " << a
<< " b:…
[/Quote]
up
Neves_pa 2008-12-17
  • 打赏
  • 举报
回复
当第一次执行func函数时,a是被初始化为2的,以后每次进入时就不再执行a=2这一句了,只执行a+=2语句。
函数里用static int a=2;相当于定义一个全局变量int a=2;但是如果用这种全局变量定义方式,那么a的值就可能会在其他函数中被改变;
static 的值也是存放在全局存储区的,这一点与全局变量一样,但是有个static,这就表示这个变量只在自己的作用范围内有效,超过这个范围无效。
这也是和全局变量不一样的地方!
内容概要:本文介绍了如何利用 GitHub Copilot 辅助进行程序调试与 Bug 分析,强调 Copilot 不仅可用于代码生成,更是强大的代码分析与调试工具。文章详细阐述了 Copilot 在调试复杂问题、老旧项目维护和难以复现 Bug 场景下的优势,提出了“先分析、再修改”的四步流程:分析原因→评估风险→提出方案→修改代码,并推荐结合错误日志、用户操作等信息精准提问,提升 AI 回答质量。同时展示了如何通过 Copilot 增强调试能力,如自动加日志、异常保护、生成测试数据和性能分析。最后通过游戏拾取系统的实际案例,说明如何结构化描述问题以获得有效反馈。; 适合人群:具备一定开发经验,正在参与项目调试或维护工作的程序员,尤其是面对复杂逻辑、历史代码或难复现 Bug 的 1-3 年开发者;也适合希望提升 AI 协作能力的技术人员。; 使用场景及目标:①快速定位偶发性崩溃、数据异常等问题根源;②理解无文档或结构混乱的老代码模块;③优化调试流程,借助 AI 生成诊断建议、修复方案与测试用例;④构建更具健壮性的程序,提前发现潜在缺陷。; 阅读建议:学习者应结合自身项目中的真实问题,按照文中提供的结构化提问模板实践,逐步训练与 Copilot 的协作能力,重视问题描述的完整性与准确性,避免直接要求修改代码,优先通过分析提升对系统的理解。
内容概要:本文针对高精度电流控制下的永磁同步电机(PMSM)参数辨识难题,提出一种基于粒子群优化算法(PSO)的多参数辨识模型,并在Simulink环境中完成系统仿真实现。研究旨在克服传统控制中因电机参数(如定子电阻、交直轴电感、永磁磁链等)随温度、负载变化而失配所导致的电流控制性能下降问题。通过构建以电流跟踪误差为核心的适应度函数,利用PSO算法全局寻优能力强的特点,实现对关键电机参数的在线或离线精确辨识。文中详述了PSO算法的实现机制、参数初始化策略、收敛判据设计以及与PMSM矢量控制系统的集成方法,验证了该方案在不同运行工况下的辨识精度、收敛速度与鲁棒性,显著提升了电流环的动态响应品质与稳态控制精度。; 适合人群:具备电机驱动控制、现代控制理论及优化算法基础,熟悉MATLAB/Simulink仿真平台,从事高性能PMSM控制系统研发的研究生、高校科研人员及自动化、电力电子领域的工程师;特别适合正在开展参数自适应、智能控制算法应用等相关课题的研究者。; 使用场景及目标:①应用于高端制造装备、电动汽车驱动系统、精密伺服系统等对电流控制精度要求严苛的场合;②解决实际工程中因电机温升、老化等因素引发的参数漂移问题,提升系统长期运行稳定性;③作为智能优化算法与电机控制深度融合的教学案例,帮助理解PSO在复杂非线性系统参数辨识中的应用逻辑与实现路径。; 阅读建议:建议读者结合提供的Simulink仿真模型进行复现实验,重点剖析PSO算法模块与电机控制模型的接口设计、适应度函数的构建原则及参数敏感性分析方法,可进一步尝试引入其他先进优化算法(如GWO、HHO)进行性能对比,以深入掌握不同智能算法在工程辨识问题中的适用性与优劣。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧