阿神2017-04-17 14:21:26
首先回答您的問題:循環內部(也就是大括號內部)定義的變量,在外部是無法被使用的。而且編譯的時候,會告訴您,此變數沒有定義。
原因:在花括號外部使用內部定義的變量,已經超出了變數的作用域。
下面簡單介紹下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,函數外部。 、5,同時,又間接包含作用域3;(作用域2中聲明的變數可以在作用域2,以及2的下一級作用域3中使用,但是不能在0、1、4、5中使用。
也就是說,只能在目前作用域或子級作用域下面使用。
變數的宣告的位置
在C/C++
標準的C
中,有嚴格的規範,變數的聲明必須在作用域的起始部分。 (如有程式碼疑問,可能是您在C++中把C混淆了,或者您的編譯器的標準不嚴格。嚴格的一般應該是linux或unix下的C標準。)甚至,函數內部的所有變數聲明,都人為的嚴格要求在函數起始部分,防止變數的隨處宣告和定義。 (這一點,可能和您的老師或師傅,以及有的書本中,影片中描述的不一樣,那是因為現在多數程式語言已經不這麼要求,而他們混淆了規則。)請記住,嚴格的標準的C,變數的宣告是在作用域或函數的起始部分。個人建議,統一放在函數的起始部分。
優點
天蓬老师2017-04-17 14:21:26
讓變數z在下一個迴圈中使用嗎?
先說說我對變數使用的理解
變數實際上對應的是記憶體中的一塊空間,機器底層根本不知道有什麼變數名,有的只是記憶體位址。
我們使用變數要嘛取值,要嘛賦值,也就是記憶體的讀寫
{
int z = 0; // 假设 z 对应的内存为 A
}
z = 1; // 这里z能不能使用? 这里能不能往A中写1
// 答案是否定的
//虽然你感觉两个变量都是z,他们应该代表的是同一个内存
//但,实际上面代码和下面代码是等同的
{
int z = 0;
}
a = 1;