目录
一、在C++中,局部变量、静态局部变量、全局 变量、静态全局变量各自的作用域和生命周期是怎样的?
二、描述const 关键字在指针和引用上的使用方式及意义,如const int *p与int const *p有何区别,又如何int*const p和const int* const p?
一、在C++中,局部变量、静态局部变量、全局 变量、静态全局变量各自的作用域和生命周期是怎样的?
- 局部变量:局部变量是在函数内部声明的变量,其作用域仅限于该函数内部。
自己的理解:局部变量就像你在家里的小玩具,只能在家里(函数里面)玩。当你离开家(函数结束)的时候,玩具(局部变量)就不能玩了,下次再回家的时候,那个玩具可能就不是上次的那个了。
- 静态局部变量:静态局部变量是在函数内部使用
static
关键字声明的变量。与局部变量不同,静态局部变量的作用域仍然仅限于函数内部,但其生命周期从程序开始执行时就存在,直到程序结束。即使函数被多次调用,静态局部变量也只会被初始化一次。
自己的理解:静态局部变量就像你在家里养的小金鱼。虽然你每次离开家(函数结束),但小金鱼还在家里,不会消失。下次你回家(再次调用函数)的时候,小金鱼还在,而且它还记得你上次喂它吃了多少食物。
- 全局变量:全局变量是在函数外部声明的变量,可以在程序的任何地方访问。全局变量的生命周期从程序开始执行时就存在,直到程序结束。全局变量可以用于在多个函数之间共享数据。
自己的理解:全局变量就像家里的大电视,整个家里的人(整个文件里的代码)都可以看到它,都可以使用它。但是,如果你去了朋友家(其他文件),可能就看不到家里的那个大电视了。
- 静态全局变量:静态全局变量是在函数外部使用
static
关键字声明的变量。与全局变量不同,静态全局变量只能在声明它们的源文件中访问。静态全局变量的生命周期与全局变量相同,从程序开始执行时就存在,直到程序结束。
自己的理解:静态全局变量就像家里的秘密宝藏。虽然它像大电视一样可以在家里看到,但是如果你去了朋友家(其他文件),即使告诉他们你家有宝藏,他们也找不到,因为这个宝藏只有你自己知道。
二、描述const 关键字在指针和引用上的使用方式及意义,如const int *p与int const *p有何区别,又如何int*const p和const int* const p?
const 关键字位置 |
指针或引用类型 | 能否修改指针的地址 | 能否通过指针修改值 |
---|---|---|---|
const 在 *之前 |
const int *p 或 const int& r |
能 | 不能 |
const 在 *之后 |
int* const p 或 int const& r |
不能 | 能 |
const 在 * 前后 |
const int* const p 或 const int& const r |
不能 | 不能 |
- 如果
const
出现在 *之前,则指针指向的对象是只读的,可以修改这个指针本身,让它指向别的变量。就像你有一个玩具,你不能改变这个玩具本身,但是你可以把它从一个地方拿到另一个地方。 - 如果
const
出现在 *之后,则指针本身是只读的,通过这个指针来修改它所指向的变量。就像你有一个玩具,你不能改变这个玩具本身,但是你可以改变这个玩具的颜色。 - 如果
const
出现在 * 前后,则指针和其指向的对象都是只读的,这个指针既不能被修改,也不能通过它来修改它所指向的变量。就像你有一个玩具,你既不能改变这个玩具本身,也不能改变这个玩具的颜色。