❶ c語言的定義與聲明是什麼
聲明就是聲明一下我用到的變數或者類型,變數或者類型的實際定義並不一定在本文件內。
給變數分配了空間才叫做定義,否則就是聲明
比如extern int a; 是聲明,a的定義是在別處,這里並沒有為a分配空間。
比如int a;即是定義
函數以及類型,聲明就是用函數或者類型的頭部來聲明
比如 struct x;聲明 struct x{};定義
比如 int fun();聲明 int fun(){}定義
❷ c語言如何聲明字元串
C語言中沒有字元串類型的變數。
他只有字元變數類型char,所以字元串用變通的方式來表示。
第一是字元數組來表示字元串。用下面的語句聲明:
char a[10];
C語言中字元數組與字元串的唯一區別是字元串末尾有一個結束符'\0',而字元數組不需要。
如剛才聲明的a[10]是一個含有10個元素的字元數組,它也能存放含有9個元素的字元串。
第二種方式是直接用指針。語句是:
char *a;
用指針聲明的字元數組,大多數功能與字元數組表示字元串相同。但也有以下兩點不同,一是儲存位置不同,用字元數組表示時,字元串是存放在儲存器的變數區域內;而用指針表示的字元數組是存儲在儲存器的常量區內;第二個區別是字元數組的字元串可以更改,而指針表示的字元串不能更改。
有關字元串的賦值方法,如何引用,請參考相關書籍。
有什麼問題請留言。
❸ 怎樣讀C語言的聲明
不叫如何讀 C 語言的聲明,而是根據你具體的編程需要,將某個變數聲明成哪一種數據類型的。例如:對於字元型變數 char 來說,如果你希望將字元型變數 char 的范圍擴大一些才能夠滿足你的需求,那麼就必須將字元型變數聲明成:unsigned char my_char ;(無符號字元型,通常涉及到漢字內碼編碼的程序就必須使用無符號字元型,因為漢字內碼的表示規定了漢字的兩個位元組,每個位元組的最高位必須為 1,所以其范圍是從:0 - 255);如果只是做一個簡單的英文字元處理程序,不涉及漢字處理,那麼就可以將字元型變數聲明成:char my_char ;
❹ 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語言中,聲明和定義有什麼區別
如果是指變數的聲明和定義:
從編譯原理上來說,聲明是僅僅告訴編譯器,有個某類型的變數會被使用,但是編譯器並不會為它分配任何內存。而定義就是分配了內存。
對於下面的兩句代碼:
void Func()
{
int a;
int b=1;
a=0;
}
對於第一行代碼,編譯器不會做任何事,它不會為它在棧中分配一點東西,直到第三句,a=0;時,編譯器才會將其壓入棧中。而對於int b=0;這一句,編譯器就會生成一條指令,為它賦值。如果反匯編,看到的代碼可能是這樣的:
push 1;
push 0;
當然,並不一定編譯器就會樣做,也有可能在聲明int a時,編譯器就會把一個廢值入棧,到第三條再為其賦值,這要看編譯器的具體取捨,所以,聲明不一定不是定義,而定義一定是定義。
但是,下面的聲明,一定僅僅是聲明:
extern int a;
這表時,有一個int變數a,它一定是在另外其他地方定義的,所以編譯器此時一定不會做什麼分配內存的事,因為它就是聲明,僅僅表明下面的代碼引用了一個符號,而這個符號是int類型的a而已。
如果是指函數的聲明和定義:
聲明:一般在頭文件里,對編譯器說:這里我有一個函數叫function() 讓編譯器知道這個函數的存在。
定義:一般在源文件里,具體就是函數的實現過程 寫明函數體。
❻ C語言里聲明是什麼意思
什麼是聲明:有兩重含義,如下:
第一重含義:告訴編譯器,這個名字已經匹配到一塊內存上了(伊人已嫁,吾將何去何
從?何以解憂,唯有稀粥),下面的代碼用到變數或對象是在別的地方定義的.聲明可以出
現多次.
第二重含義:告訴編譯器,我這個名字我先預定了,別的地方再也不能用它來作為變數
名或對象名.比如你在圖書館自習室的某個座位上放了一本書,表明這個座位已經有人預
訂,別人再也不允許使用這個座位.其實這個時候你本人並沒有坐在這個座位上.這種聲
明最典型的例子就是函數參數的聲明,例如:
void fun(int i, char c);好,這樣一解釋,我們可以很清楚的判斷:a)是定義;b)是聲明.
❼ 在C語言中聲明和定義有什麼區別
C語言變數的定義和聲明的不同之處:
1、變數在使用前就要被定義或者聲明;
2、在一個程序中,變數只能定義一次,卻可以聲明多次;
3、定義分配存儲空間,而聲明不會。
(7)c語言聲明擴展閱讀:
變數的定義:用於為變數分配存儲空間,還可以為變數指定初始值。在程序中,變數有且僅有一個定義。
聲明:用於向程序表明變數的類型和名字。
定義也是聲明:當定義變數的時候我們聲明了它的類型和名字。可以通過使用extern聲明變數名而不定義它。不定義變數的聲明包括對象名、對象類型和對象類型前的關鍵字extern。
extern聲明不是定義,也不分配存儲空間。事實上它只是說明變數定義在程序的其他地方。程序中變數可以聲明多次,但只能定義一次。
只有當聲明也是定義時,聲明才可以有初始化式,因為只有定義才分配存儲空間。初始化式必須要有存儲空間來進行初始化。如果聲明有初始化式,那麼它可被當作是定義,即使聲明標記為extern。
任何在多文件中使用的變數都需要有與定義分離的聲明。在這種情況下,一個文件含有變數的定義,使用該變數的其他文件則包含該變數的聲明(而不是定義)。
❽ C語言聲明
int 是變數的類型,表示整形的數據,後面是變數名,變數名是可以隨便命名的。不過習慣上就他的英文命名。
❾ c語言怎麼聲明函數
定義函數
C 語言中的函數定義的一般形式如下:
return_type function_name( parameter list )
{
body of the function
}
在 C 語言中,函數由一個函數頭和一個函數主體組成。下面列出一個函數的所有組成部分:
返回類型:一個函數可以返回一個值。return_type 是函數返回的值的數據類型。有些函數執行所需的操作而不返回值,在這種情況下,return_type 是關鍵字 void。
函數名稱:這是函數的實際名稱。函數名和參數列表一起構成了函數簽名。
參數:參數就像是佔位符。當函數被調用時,您向參數傳遞一個值,這個值被稱為實際參數。參數列表包括函數參數的類型、順序、數量。參數是可選的,也就是說,函數可能不包含參數。
函數主體:函數主體包含一組定義函數執行任務的語句。