1. 程式人生 > 其它 >深拷貝與淺拷貝Object.assign()

深拷貝與淺拷貝Object.assign()

技術標籤: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):擴充套件全域性變數的作用域

(1):在一個檔案內擴充套件全域性變數的作用域

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函式中全域性變數無效。