變量的作用力和生存期相當(dāng)于變量的"攻擊范圍"和"生命力"形娇。
1. 作用域
1.1 作用域是什么?
在什么范圍內(nèi)可以訪問這個(gè)變量。
1.2 作用域怎么用?
試一下下面的代碼
#include <stdio.h>
int main(){
int n =0;
for(int i=0;i<10;++i){
n += i;
}
printf("%d %d\n",i,n);
}
#include <stdio.h>
int main(){
{
int n =0;
printf("%d\n",n);
}
printf("%d\n",n);
}
#include <stdio.h>
int main(){
{
int n =0;
printf("%d\n",n);
}
{
int n =10;
printf("%d\n",n);
}
}
局部變量作用域在變量定義的大括號(hào)以內(nèi)眶拉。
2. 生存期
2.1 生存期是什么筐咧?
變量什么時(shí)候出現(xiàn)到什么時(shí)候滅亡。
對(duì)于局部變量脆贵,生存期與作用域一致医清。
2.2 生存期怎么用?
#include <stdio.h>
int* func(){
int n=10;
int* p = &n;
return p;
}
int main() {
int* p = func();
// printf("p = %p\n",p);
printf("*p = %d\n",*p);
return 0;
}
#include <stdio.h>
void print_array(int arr[],int n){
for(int i=0;i<n;++i){
printf("%d ",arr[i]);
}
printf("\n");
}
int* scanf_array(int* n){
scanf("%d",n);
int arr[*n];
for(int i=0;i<*n;++i){
scanf("%d",&arr[i]);
}
return arr;
}
int main(){
int n;
int *arr = scanf_array(&n);
print_array(arr,n);
}
不要返回局部變量的地址卖氨,不要返回局部變量的地址会烙,不要返回局部變量的地址。
3. 同名隱藏
在相同作用域中筒捺,同名變量會(huì)報(bào)錯(cuò)柏腻;在不同的作用域中,內(nèi)部變量會(huì)隱藏外部變量系吭。
#include <stdio.h>
int main() {
int n = 1;
{
printf("n = %d\n",n);
int n=10;
printf("n = %d\n",n);
n = 20;
}
printf("n = %d\n",n);
return 0;
}