拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
首先回答您的问题:循环内部(也就是大括号内部)定义的变量,在外部是无法被使用的。而且编译的时候,会告诉您,此变量没有定义。原因:在花括号外部使用内部定义的变量,已经超出了变量的作用域。下面简单介绍下C/C++花括号作用域
//作用域,可以看作一个变量的有效使用区域 //函数外部也是一个大的作用域,暂且记作:作用域0 void Fun() { //函数内部作用域,暂且记作:作用域1 while() { //循环内部,暂且记作:作用域2 if() { //if内部,也是一个作用域,暂且记作:作用域3 } } if() { //if内部,也是一个作用域,暂且记作:作用域4 } { //我只写个花括号,这个也是一个作用域,暂且记作:作用域5 } }
从上面代码块儿,可以看到,作用域0,直接包含作用域1,同时,又间接包含作用域2、3、4、5;(作用域1中声明的变量,可以在其本身,以及2、3、4、5中使用,但是不能在1的上级作用域使用,也就是作用域0,函数外部。)作用域1,直接包含作用域2、4、5,同时,又间接包含作用域3;(作用域2中声明的变量可以在作用域2,以及2的下一级作用域3中使用,但是不能在0、1、4、5中使用。)变量的使用,只能是从变量声明的作用域,向下延伸,不能反向,不能向上一级作用域。也就是说,只能在当前作用域或者子级作用域下面使用。
下面,简单说一下C/C++中的变量声明。在标准的C中,有严格的规范,变量的声明必须在作用域的起始部分。(如有代码疑问,可能是您在C++中把C混淆了,或者您的编译器的标准不严格。严格的一般应该是linux或unix下的C标准。)甚至,函数内部的所有变量声明,都人为的严格要求在函数起始部分,防止变量的随处声明和定义。(这一点,可能和您的老师或者师傅,以及有的书本中,视频中描述的不一样,那是因为现在多数编程语言已经不这么要求,而他们混淆了规则。)请记住,严格的标准的C,变量的声明是在作用域或者函数的起始部分。个人建议,统一放在函数的起始部分。优点
C/C++
开发阶段,一般有的函数体很庞大(遇到这种情况,一般是函数的设计问题,但也不排除必要性。)面对如此庞大的函数体,变量的声明统一在函数起始位置,可以防止变量使用的时候,未声明,尤其使用goto语句的时候,很容易就跳过了某些变量的声明。
便于变量的多次有效利用,也就是,一次声明,多次初始化,多次利用。
便于阅读..
只能在循环体外部定义,如果不想将z暴露在循环体外,可以用{}包住两个循环体,并在{}中定义z
z
{}
不知道有什么办法可以在另一个循环中,使用上一个循环中定义的变量, 也不建议这么用,如果代码比较多, 会比较乱
让变量z在下一个循环中使用吗?
先说说我对变量使用的理解变量实际上对应的是内存中的一块空间,机器底层根本不知道有什么变量名,有的只是内存地址。我们使用变量要么取值,要么赋值,也就是对内存的读和写
{ int z = 0; // 假设 z 对应的内存为 A } z = 1; // 这里z能不能使用? 这里能不能往A中写1 // 答案是否定的 //虽然你感觉两个变量都是z,他们应该代表的是同一个内存 //但,实际上面代码和下面代码是等同的 { int z = 0; } a = 1;
不能,违反作用于规则
首先回答您的问题:循环内部(也就是大括号内部)定义的变量,在外部是无法被使用的。而且编译的时候,会告诉您,此变量没有定义。
原因:在花括号外部使用内部定义的变量,已经超出了变量的作用域。
下面简单介绍下C/C++花括号作用域
花括号作用域
从上面代码块儿,可以看到,
作用域0,直接包含作用域1,同时,又间接包含作用域2、3、4、5;(作用域1中声明的变量,可以在其本身,以及2、3、4、5中使用,但是不能在1的上级作用域使用,也就是作用域0,函数外部。)
作用域1,直接包含作用域2、4、5,同时,又间接包含作用域3;(作用域2中声明的变量可以在作用域2,以及2的下一级作用域3中使用,但是不能在0、1、4、5中使用。)
变量的使用,只能是从变量声明的作用域,向下延伸,不能反向,不能向上一级作用域。也就是说,只能在当前作用域或者子级作用域下面使用。
变量的声明的位置
下面,简单说一下
C/C++
中的变量声明。在标准的C中,有严格的规范,变量的声明必须在作用域的起始部分。(如有代码疑问,可能是您在C++中把C混淆了,或者您的编译器的标准不严格。严格的一般应该是linux或unix下的C标准。)
甚至,函数内部的所有变量声明,都人为的严格要求在函数起始部分,防止变量的随处声明和定义。(这一点,可能和您的老师或者师傅,以及有的书本中,视频中描述的不一样,那是因为现在多数编程语言已经不这么要求,而他们混淆了规则。)请记住,严格的标准的C,变量的声明是在作用域或者函数的起始部分。个人建议,统一放在函数的起始部分。
优点
开发阶段,一般有的函数体很庞大(遇到这种情况,一般是函数的设计问题,但也不排除必要性。)面对如此庞大的函数体,变量的声明统一在函数起始位置,可以防止变量使用的时候,未声明,尤其使用goto语句的时候,很容易就跳过了某些变量的声明。
便于变量的多次有效利用,也就是,一次声明,多次初始化,多次利用。
便于阅读..
以上是本人的浅薄经验,在此分享。如有错误请指正。有些东西,写的多了,就会体会到。
只能在循环体外部定义,如果不想将
z
暴露在循环体外,可以用{}
包住两个循环体,并在{}
中定义z
不知道有什么办法可以在另一个循环中,使用上一个循环中定义的变量, 也不建议这么用,
如果代码比较多, 会比较乱
让变量z在下一个循环中使用吗?
先说说我对变量使用的理解
变量实际上对应的是内存中的一块空间,机器底层根本不知道有什么变量名,有的只是内存地址。
我们使用变量要么取值,要么赋值,也就是对内存的读和写
不能,违反作用于规则