关于c++变量作用域有关问题-在一个for循环体中定义的变量-外部如何用

关于c++变量作用域问题-在一个for循环体中定义的变量-外部怎么用?
#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int c = 0; 

for(int i =0; i<10; i++)
{
int z = 0;
}

for(int i=0; i<10; i++)
{
z = 10;
printf("haha\n");
}

cout<<"Hello world\n"<<endl;

}

会报错:
Hello.cpp:17:3: 错误: ‘z’在此作用域中尚未声明

或者是说 作用域 是怎么划分的呢? 大括号?
------解决方案--------------------
就是{  }
------解决方案--------------------
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    int c = 0; 
     
    for(int i =0; i<10; i++)
    {//变量z存在的世界
        //变量z出生前;
        int z = 0;
    }//变量z存在的世界
 //执行到这z和在他世界里出生东西已经不存在;

    for(int i=0; i<10; i++)
    {
        // z 是谁?
        z = 10;
        printf("haha\n");
    }    
     
    cout<<"Hello world\n"<<endl;
     
}

事实: 执行到 int  z = 0;的执行编译器把标示符z加到编译器维护的散列表中,假如发生散列冲突(可能前面已经定义过全局的变量 int z = 1;),将局部的z加入到全局z的前面(链表法),所有对z的引用都是对局部z的引用,当z跳出作用域后,编译器将z从链表的头部删掉,此时对z的引用变为对全局z的引用(<程序员使用算法>);
------解决方案--------------------
水到渠成的,学习时间长了就自然了解了,慢慢学,祝你好运