當前位置:首頁 » 編程語言 » c語言中聲明變數可以在函數體
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中聲明變數可以在函數體

發布時間: 2022-07-05 09:58:34

c語言中在函數名和函數體之間插入變數聲明是什麼用法

C89/90 編譯器支持的K&R格式的C語法,參數聲明跟在函數括弧後。C99也支持該語法,只不過在C99中,參數聲明必須顯式,沒有默認的int支持。另外,不用在VS上嘗試編譯此種語法,微軟對該語法的支持應該是拋棄的(沒有試過,只是依稀記得VS對C99的支持是很少)。

⑵ c語言函數聲明

假設主函數main()。其他函數void fun(int a,int *b)。

關於函數定義和聲明:

在代碼中fun函數,有完整函數體的代碼就是函數定義部分,比如void fun(int a,int *b){。。。};。

如果沒有具體實現的函數體代碼(也就是大括弧內容),那麼就是函數聲明。比如void fun(int ,int *);

關於函數聲明和調用:

如果fun函數定義在main代碼上面。比如:

void fun(int a,int *b){。。。};

int main(){

int a=0,int b=0;

......

fun(a,&b);//這里fun定義代碼在main上面,所以可以不需要聲明。反之需要先寫聲明語句

return 0;

}

關於函數局部變數及全局變數:

簡單區分:

定義在函數之外的就是全局變數,這個變數所有函數都可以直接使用,並且共用同一個地址。任意函數修改了變數值,其他函數調用也會變。

定義在函數之內的就是局部變數,局部變數只屬於該函數,其他函數即使定義了同樣名字的變數,這兩個變數也不同地址,互不相干。

比如:

int a;//這就是全局變數,作用域下所有函數共用

int main()

{

int b;//這就是局部變數,只在本函數有效,如果想在調用fun函數時讓fun也使用該變數,需要把這個變數的地址作為參數傳遞過去。

printf("%d",b);

return 0;

}

注意:c語言中允許局部變數和全局變數同名,但是同名的局部變數會屏蔽全局變數,實際代碼避免同名。

關於函數傳值和傳址:

如函數void fun(int a,int *b){..........};這里形參a 和*b,分別表示一個值和一個地址

所以在調用該函數時,比如:

int main()

{

int c,d;

fun(c,&d);//這里調用就對應上面形參類型,第一個參數傳遞了c的值(傳值),第二個參數傳遞了d的地址(傳址),這里c和&d,叫做實參。當fun函數運行時改變了a和b指向地址的值,對應main函數中c的值不變,d的值改變。

return 0;

}

順帶一說:局部變數,在函數運行結束後會自動釋放,所以想把局部變數地址作為返回值,需要用malloc函數申請。(這里看不懂可以暫時忽視)

⑶ C語言一個變數聲明在函數里,初始化在for語句小括弧里,那麼for語句外函數里這個變數能用嗎

這個地方用i是沒問題的,因為i的作用域是整個f()函數,但是要注意在for循環中已經改變了i的值,希望可以幫到你。

⑷ C語言中,聲明變數和初始化變數有什麼作用

c語言中,變數只有先聲明,才能使用,這樣避免編程時產生不必要的錯誤,一位不同類型變數的存儲格式和長度都不同,所以位元組長度不同,聲明變數可以讓計算機知道你更需要用什麼樣的格式存儲變數,從而高效穩定地運行程序。

C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。

(4)c語言中聲明變數可以在函數體擴展閱讀:

C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植,這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。

與其他高級語言相比,C語言可以生成高質量和高效率的目標代碼,故通常應用於對代碼質量和執行效率要求較高的嵌入式系統程序的編寫。

⑸ C語言變數的定義可以放在函數中任意位置嗎

不可以放在函數中任意位置
C語言語法規定任意變數的定義,都必須在最開始的地方聲明

⑹ C語言中怎樣申明變數

任何一種編程語言都離不開變數,特別是數據處理型程序,變數的使用非常頻繁,沒有變數參與程序甚至無法編制,即使編制運行後的意義也不大。變數之所以重要,是因為變數是編程語言中數據的符號標識和載體。

C語言是一種應用廣泛的善於實現控制的語言,變數在C語言中的應用更是靈活多變。那麼變數究竟是什麼呢?變數是內存或寄存器中用一個標識符命名的存儲單元,可以用來存儲一個特定類型的數據,並且數據的值在程序運行過程中可以進行修改。可見,變數首先是一個標識符或者名稱,就像一個客房的編號一樣,有了這個編號我們在交流中就可方便言表,否則,我們只可意會,那多不方便。為了方便,我們在給變數命名時,最好能符合大多數人的習慣,基本可以望名知義,便於交流和維護;其次,變數是唯一確定的對應內存若干存儲單元或者某個寄存器。這些是編譯器來保證的,用戶一般不用費心。

程序員一旦定義了變數,那麼,變數就至少可為我們提供兩個信息:一是變數的地址,即就是,操作系統為變數在內存中分配的若干內存的首地址;二是變數的值,也就是,變數在內存中所分配的那些內存單元中所存放的數據。

由於程序的多樣需要,我們對變數也有各種各樣的要求,比如:變數的生命期,變數的初始狀態,變數的有效區域,變數的開闢地和變數的開辟區域的大小等等;為了滿足這些要求,C語言的發明者就設置了以下變數:

1、 不同數據類型的變數;如:char cHar, int iTimes, flaot faverage;

2、 全局變數或者叫全程變數;

3、 局部變數;

4、 靜態變數: 靜態全局變數和靜態局部變數;關鍵詞:static

5、 寄存器變數;關鍵詞:register;

6、 外部變數: 關鍵詞:extern;

C語言中,變數在內存中開闢地的大小由數據類型決定的,由於PC機中規定一個地址單元存一個位元組,不同的數據類型的變數,為其分配的地址單元數是不一樣的。C語言中除幾種基本的數據類型外用戶還可以自己定義所需要的數據類型:

1、 bool型 sizeof(bool): 1

2、 char型: sizeof(char): 1

3、 short型: sizeof(short): 2

4、 int型: sizeof(int): 4

5、 long型: sizeof(long): 4

6、 float型: sizeof(float): 4

7、 double型: sizeof(double): 8

8、 自定義型:如:

typedef struct tagMyData

{

char cHar;

int iTimes;

float faverage;

}MyDatap;

sizeof(MyDatap): 12

char szBuf[]="HELLO C&C++!";

sizeof(szBuf): 13

局部變數和全局變數是相對而言的;如下:局部變數 int itmp;

int Get_Max( const int& x, const int& y, const int& z )

{

int itmp;

if(x > y) itmp = x;

else itmp = y;

if( itmp > z ) return itmp;

else return z;

}

在函數內部說明的變數為局部變數,只有在函數執行時,局部變數才存在,當函數執行完退出後,局部變數隨之消失。也就是,當函數執行完退出後,原先在函數內定義的變數現在不能用,這通常由編譯器保證,它會阻止編譯通過。也就是說,原來為那個局部變數分配的內存,現在已經不屬於它,它再無權訪問了。如要再使用這些內存單元就必須從新定義變數來申請,只有分配給的變數才可訪問它。否則,就會出錯,如數組越界訪問。

與局部變數不同,全局變數在整個程序都是可見的,可在整個程序運行過程中,對於任何一個程序都是可用的。全局變數的說明的位置在所有函數之外,但可被任何一個函數使用,讀取或者寫入。如下:全局變數 int iCount, bool bForward;

int iCount; //全局變數;

bool bForward; //全局變數;

void add( void );

void dec( void );

void man(void )

{

while( iCount < 1000 && iCount > -1000)

{

add( );

dec( );

printf("COUNT:%d;\n", iCount)

}

}

void add( void )

{

if( bForward ) iCount++;

}

void dec( void )

{

if(!bForward ) iCount--;

}

可見,全局變數非常方便不同函數間數據共享,同樣,任何函數在在使用數據時,都不敢保證數據是否已被修改。如果程序員無法保證這個,就盡量避免使用全局變數。

靜態變數是分配在存儲器中C程序所佔據的數據段內, C程序運行的整個過程中一直保留,不會被別的變數佔用。靜態變數可以定義成全局變數或局部變數,當定義為全局變數時,在它定義的程序的整個運行期間均存在並且保持原來的存儲單元位置不會改變。那麼既然有了全局變數為什麼還要定義全局靜態變數呢?看下邊的示例:

⑺ C語言中,如何定義一個變數,使其既可以在主函數中使用,也可以在子函數中使用

把變數定義在主函數之外,即把變數設置為全局的。一般我們都把變數的定義放在函數中,因此變數的范圍就是在本函數中。可是如果定義在所有函數的外面,這樣所有的函數中,都可以使用本變數。你可以試一下這個程序。定義一個全局變數a,在主函數中進行賦值,然後在子函數中進行輸出,結果是5.#include<stdio.hint a;void func();//函數聲明int main(){ a=5; func();}void func(){ printf("%d\n", a);}+++++++++++++++++++++++++++++++++++++++++++++++++++當然,除了定義全局變數這個方法,還有其他的方法,那就是指針。在子函數的參數中傳遞變數的地址,依然可以使用該變數,依然能夠改變該變數的值。比如下面這個程序,在主函數中a的值為5,將變數a的地址傳遞過去,子函數將該地址中的變數的值設置為3,然後主函數輸出,結果卻是3.#include<stdio.hvoid func(int *b);//函數聲明int main(){ int a=5; func(&a);//把變數a的地址傳遞過去 printf("%d\n", a);}void func(int *b){ *b=3; //將地址b中變數的值設置為3}

⑻ c語言函數中定義的變數是否只在該函數內有用

通常是的,但當調用函數時可以讓它生存期更久一點。

⑼ C語言中,把變數定義在主函數之外和定義在主函數之內有什麼區別

最後的值是100.
在函數體之內的i和函數體之外的i是存放在兩個內存位置的,在內部能夠看到的是內部生存期的。
建議你去看下變數在函數的生存期和內存中的位置,會有更深刻的理解。

⑽ C語言中函數內部聲明的靜態變數的在函數外可以訪問嗎

不可以
只有全局變數才可以
靜態變數,只是裡面的值不會因為函數調用結束而還原