標識符的作用範圍,變量的聲明和定義,auto,register自動變量,代碼作用域的靜態變量

文件作用範圍

int total;

int max();

作用範圍:從聲明的位置開始,到文件末尾

函數作用範圍

程序塊作用範圍

函數原型作用範圍



變量的聲明

聲明:給編譯器看的,告知有這麼一個變量,但是此變量是在別的文件裏定義的。方便編譯器做類型檢測

extern int a;//正確的寫法 extern 聲明的關鍵字

定義:爲變量要開闢內存空間

一個全局變量可否被多次定義?不可以

一個全局變量可否被多次聲明?可以


int total;

int max(int ,int);

int main(){


}


這個total 是聲明還是定義呢?如果整個文件裏只有一個total,就是定義,定義沒有賦初始值,如果在別的文件裏也有int toal=10;這個total 就退化成聲明瞭。


對於變量,定義意味着創建,即爲其分配內存

auto自動變量:

 所有自動變量的聲明週期就是變量所在的大括號範圍

局部變量的缺省類別



register 自動變量

變量都是在內存當中。如果能把變量放到cpu的寄存器裏面,代碼執行效率會更高。


register int b;

優先分配寄存器,而不分配內存,但不是絕對分配寄存器。因爲cpu的寄存器是按照個數的。arm 37個,x86 17個 。個數太少的時候,是不會分配的。

static(靜態變量):可以用於在程序塊中定義的變量

      退出程序庫後依然存在。並保留值

但不改變其作用範圍,既只能在所在的程序塊內被使用。

        會自動初始化,缺省值爲0或'\0'

#include <stdlib.h>
int fun(void)
{
	static int a = 10; //靜態局部變量,作用域本函數內,聲明週期整個程序運行結束時才釋放,並且a的初始化賦值一次。
	printf("%d\n",a);
	a++;
	return 0;
}
int main(){
	fun();
	fun();
	fun();
	return 0;
}

不是在代碼塊中

static int a = 10; //限定了作用域,a只能在本文件內使用,未初始化的全部變量是0

int fun(){


}




































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章