深拷貝與淺拷貝Object.assign()
阿新 • • 發佈:2020-12-25
技術標籤:c語言
區域性變數和全域性變數
區域性變數
1:型別:自動變數(auto),暫存器變數(register),靜態區域性變數(static),其作用範圍僅限於函式內部
2:靜態區域性變數(static):函式呼叫結束後仍然保留其定義的區域性變數的值
#include<stdio.h>
func(int a,int b)
{
int i=2;
static int m=0;
i+=m+1;
m=i+a+b;
return(m);
}
int main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d\n",p) ;
p=func(k,m);
printf("%d\n",p);
return 0;
}
3:區域性變數程式碼
#include<stdio.h>
int main()
{
int a=0; //區域性變數a
{
int a=5;//區域性變數a
printf("複合語句內 a=%d\n",a);
}
printf("複合語句外 a=%d\n",a);
return 0;
}
全域性變數
1:型別:靜態全域性變數,外部變數(非靜態全域性變數,可以被其他檔案引用)
2:外部變數(extern):擴充套件全域性變數的作用域
nclude<stdio.h>
int main()
{
extern int a; //宣告已定義的全域性變數
a=3;
printf("a=%d\n",a);
return 0;
}
int a; //定義a為整形全域性變數
(2)將全域性變數的作用域擴充套件到其他檔案
f1.c
#include<stdio.h>
int a,b,c;
int main()
{
void f();
a=3;
b=4;
f();
printf("c=%d\n",c);
}
f2.c
extern int a,b,c;
void f() //把f1中已定義的全域性變數的作用域擴充套件到本檔案中
{
c=a+b;
}
(3)extern 只能用來宣告變數,不能用來定義變數,因為它不產生新變數,只能宣告該變數已在其他地方定義過,extern也不能用來定義初始化變數,例如“extern int x=1”是錯誤的。
3:全域性變數的程式碼
#include<stdio.h>
int a,b,c;//全域性變數a,b,c
void f()
{
c=a+b;
}
int main()
{
a=3;
b=4;
f();
printf("c=%d\n",c);
}
4:當全域性變數和區域性變數重名時,則在區域性變數的作用範圍內,全域性變數不起作用
#include<stdio.h>
int d;
fun(int p)
{
int d=3;
d+=p;
printf("d=%d,p=%d",d,p);
}
int main()
{
int a=2;
fun(a);
d+=a;
printf("d=%d,a=%d\n",d,a);
return 0;
}
上述程式中d位全域性變數,在main函式中,起作用的是全域性變數d。而在fun函式中定義了局部變數d,所以在fun函式中全域性變數無效。