各位大哥,关于C语言多次重新定义变量的问题?

1030486762567 2020-09-21 04:28:54
这里我两次重新定义 int*类型的Q变量,dev-C 报错,说不能重新定义。[/color]



[color=#000080]下图所示教学视频里的程序,两次定义 int*类型的p变量,不报错,这是为什么呢? 都是多次定义变量,我觉得下面的写法应该报错,但是却没报错……



我觉得应该改写成下面这样,这样不会报错,也好看。请各位老大哥,解释一下,小弟不胜感激,自学的我太慢了,模电,数电,单片机……以后做什么呢……
...全文
387 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
1030486762567 2020-09-22
  • 打赏
  • 举报
回复
C语言复合语句(语句块) C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应! 复合语句(compound statement)简称为语句块,它使用大括号把许多语句和声明组合到一起,形成单条语句。 { [声明和语句的列表] } 语句块与简单的语句不同,语句块不用分号当作结尾。当出现语法上某处需要一条语句,但程序却需要执行多条语句时,就可以用到语句块。例如,可以在 if 语句中使用语句块,或者当循环体需要执行多条语句时,也可以使用语句块: { double result = 0.0, x = 0.0; // 声明 static long status = 0; extern int limit; ++x; // 语句 if ( status == 0 ) { // 新语句块 int i = 0; while ( status == 0 && i < limit ) { /* ... */ } // 另一个语句块 } else { /* ... */ } // 第三个语句块 } 如果语句块内需要有声明,通常会把声明放在语句块的头部,在其他语句之前。然而,C99 并不强制这么做,允许将声明放在语句块内的任何地方。 在语句块内声明的名称将具有语句块作用域。换句话说,这些名称只有自声明点开始,一直到语句块结尾之前有效。在这个作用域内,这种声明会把在语句块以外声明的同名称对象隐藏起来。 同样地,动态变量的存储周期也被限制在语句块中它们生成的地方。这意味着,如果一个变量没有被声明为 static 或 extern,那么该变量的存储空间会在语句块结束之后自动被释放。
自信男孩 2020-09-21
  • 打赏
  • 举报
回复
因为p是在代码块里,作用域是代码块内可见;而Q的作用域是main函数可见,所以是重定义。

p在for循环里,在循环里是可见和使用没问题,出了代码块(循环)就不认识了。
lin5161678 2020-09-21
  • 打赏
  • 举报
回复
复合语句包起来的范围是 块作用域 两个p定义在不同的块作用域 这是合法的
qybao 2020-09-21
  • 打赏
  • 举报
回复
lz应该先找本入门级的书学习一下变量的作用域范围方面的知识
lin5161678 2020-09-21
  • 打赏
  • 举报
回复
这是一个作用域的问题 不同作用域相同符号表达不同实体 是允许的 把这句话套到你的代码里面 出现错误就是在一个作用域里面有定义了相同符号 没出现错误就是相同符号出现在不同作用域
ggglivw 2020-09-21
  • 打赏
  • 举报
回复
因为他在{} 里面,涉及到一个变量隐藏,局部变量重新定义会隐藏开头的那个变量。你两个变量同一个区域,没法隐藏,所以报错

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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