1. 程式人生 > >變量定義與變量聲明

變量定義與變量聲明

c

1、看例子如下:

int tern=1;

main()

{

extern int tern;

......

這裏tern 聲明了兩次,第一次聲明為變量留出了存儲空間。它構成了變量的定義。第二次聲明只是告訴編譯器使用先前定義的變量tern,因此不是一個定義。第一次聲明稱為定義聲明,第二次聲明稱為引用聲明,關鍵字extern表明該聲明不是一個定義,因此它指示編譯器參考其他地方。而且extern是一個引用聲明,絕不是定義聲明,所以不可用它進行定義操作。木有這種的操作的哦。

2、具有內部鏈接的靜態變量

這種存儲類的變量具有靜態存儲時期、文件作用域以及內部鏈接。通過使用存儲類說明符static在所有函數外部進行定義。

static int svil=1;//具有內部鏈接的靜態變量

int main(){

}

以前這類變量稱為外部靜態變量,但因為它具有內部鏈接,所以現在用 具有內部鏈接的靜態變量來形容,普通的外部變量可以被程序的任一文件中所包含的函數使用,而具有內部鏈接的靜態變量只可以被與他在同一文件中的函數使用。

3、存儲類說明符

c語言中有5個作為存儲類說明符的關鍵字。他們分別是:auto、register、static、extern以及typedef。

實例程序:

//parta.c 各種存儲類
#include<stdio.h>
void report_count();
void accumulate (int k);
int count=0;//文件作用域,外部鏈接
static int total=0;
int main(void)
{
	int value;//自動變量
	register int i ;//寄存器變量
	printf("enter a positive interger(0 to quit):");
	while (scanf("%d",&value)==1 && value>0)
	{
		++count;//使用文件作用域變量
		for(i=value;i>=0;i--)
			accumulate (i);
		printf("enter a positive interger(0 to quit):");
	}
}
	
	
	void report_count()
	{
	printf("loop excuted %d times\n",count);
	
	}
	void accumulate(int k){
	static int subtotal =0;
	if(k<=0){
	printf("loop cycle :%d\n",count);
	printf("subtotal: %d; total: %d\n", subtotal,total);
	subtotal=0;
	
	}
	else{
	subtotal +=k;
	total+=k;
	}
	}
	
	
	
	

運行結果:

技術分享



變量定義與變量聲明