84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
拥有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在下一个循环中使用吗?
先说说我对变量使用的理解
变量实际上对应的是内存中的一块空间,机器底层根本不知道有什么变量名,有的只是内存地址。
我们使用变量要么取值,要么赋值,也就是对内存的读和写
不能,违反作用于规则