Ⅰ c語言中, 函數名也稱為函數的指針,那函數名是否也占內存空間
ShowMenu是一個函脊族譽數名,可以看到他的值是一個地址。
&ShowMenu是對函數取地址櫻段,指向和ShowMenu同樣的地址。
可以看出,ShowMenu是佔用一穗衡個位元組的,而作為指針&ShowMenu卻佔用四個位元組。
所以說,函數名佔用空間的。
Ⅱ 什麼是函數名,什麼是函數頭,函數名是函數頭嗎
而函數頭是編譯薯脊器中已經被定義好的一些常用函搜手晌數庫,常在程序的開頭用#include
****將一些函數庫包含進文件,這樣可以給編程人員帶來方便。函數名和函數世鋒頭是不一樣的
Ⅲ c++函數名本質上就是一個指針,那麼單獨定義指向函數的指針有什麼意義話說函數指針還沒太看懂什麼意思
函數指針與一般指針並無大的理解上的差別。試想直接使用變數 int i; 與指針變數 int *pi;有什麼差別? i 只能用來訪問該變數的值,你無法用法其它變數的值。而pi可以指向任何一個整形變數,然後訪問它。函數指針的用處也在這,有時候你需要不同的情況調用不同的函數,而這多個函數的介面又是一樣的,這個時候你就可以使用函數指針鄭寬胡來調用。或者用函數指針實現委託,即程巧鄭序的主邏輯在框架里,而喊攔它只提供了幾個口子寫你的代碼,這幾個口子就是函數指針,主邏輯調用你的代碼,然後再回去執行它的。
當然,這些都是面向過程的思想。在面向對象里,有類的多態性了。
Ⅳ C語言 extern
在C語言顫大中,變數和函數都有數據類型和存儲類型兩個屬性,因此變數定義的一般形式是 {存儲類型 數據類型 變數名}
C語言種提供了以岩嘩下四種不同的存儲類型
那麼我們所說的extern就是存儲類型的一種。extern修飾的變數存儲位置在全局靜態存儲區。
標準的定義格式: extern 類型名 變數名;
通粗洞行俗來說,如果使用extern修飾了一個變數或者函數,那麼這個函數或者變數就變成了全局變數,在除定義該變數or函數的文件外仍然有效。不過需要注意的是,使用extern進行修飾是對該變數or函數進行聲明,並沒有分配內存。
如果在a.c中需要引用b.c中的int i,那麼可以在a.c中使用extern int i進行聲明。並且,能夠被其他模塊以extern修飾符引用的變數通常是全局變數。並且extern int i可以被放在a.c中的任何位置,區別只是在a.c中作用域的問題。
從本質上來說,並沒有什麼區別。函數名字本質上是一個指向二進制塊開頭處的指針。如果a.c中需要引用b.c中的函數,如b.c中原型是int fun(int mu),那麼在a.c中聲明extern int fun(int mu)那麼就可以在a.c中用fun做事。
但是對其他模塊中函數的引用,最常用的方法是包含這些函數聲明的頭文件。
那麼使用extern和包含頭文件來引用函數有什麼區別如下:
① 使用extern的引用比包含頭文件要簡介的多。extern使用直截了當,引用哪個函數直接extern進行聲明即可。這樣做的一個明顯的好處是,會加速程序的編譯(確切的說是預處理)的過程,節省時間。在大型C程序編譯過程中,這種差異是非常明顯的。
② include本質上是把include進來的這個文件原封不動的搬到當前文件中
a.c
b.c
Ⅳ 什麼叫編程函數他有什麼作用c++的結構是怎樣的
我下面說的就是函數的定義,如果你不能完全理解的話我建議你先看看下面的C語言結構,不然別人再怎麼給你解釋你也聽不明白:(
在某個變化過程中,有兩個變數x、y,如果給定自變數x一個值,那麼應變數有且只有一個變數與之對應,那麼我們稱y是x的函數。
人們對C++有許多不同的看法,保守的C++程序員堅持用其他語言創建COM組件,他們認為只有真正的程序員使用C++。另一方面,VB程序員認為C++是一種很難掌握和使用的語言,沒有必要增加編程時間和進行艱難的嘗試。Java程序員認為他們比C++程序員強,因為James Gosling(Java的發明者)吸收了許多語言(包括C++ )的優點發明了Java,本章和下一章的目的就是消除對C++的偏見和錯誤概念。
本章集中介紹用C++ 建立伺服器組件,不講述C++語言,如果想學C++ ,請參閱Ivor.Horton著的《Beginning Visual C++6》,Wrox 出版,書號為ISBN 1-861000-88-X。
本章的主要內容有:
? C++簡史。
? 使用C++原因。
? 從VB移植到C++。
? ATL、STL和MFC介紹。
? 建立一個COM組件。
? 錯誤處理與調試。
更重要的是應該記住,現在,不只是在用C++建立組件,可以使用Visual C++中可用的任何工具,使得建立過程更加容易。先從C++的起源談起。
17.1 C++語言
在決定是否使用C++語言之前,最好是搞清楚這種語言的實質,讓我們看一下C++的歷史和現狀。
17.1.1 C++簡史
剛開始形成的是C語言,那些想建立更快更有效的代碼的程序員非常欣賞C語言,有一位名叫Bjarne Stroustrup的人卻不滿足於僅僅是生產快速代碼,他想創建面向對象的C語言編程。他開始對C語言的內核進行必要的修改,使其能滿足面向對象模型的要求。C++從此產生。
Bjarne Stroustrup是C++的最初設計者和實現者。它自誕生以來,經過開發和擴充已成一種完全成熟的編程語言。現在C++已由ANSI、BSI、DIN、其他幾個國家標准機構和ISO定為標准。ISO標准於1997年11月4日經投票正式通過。
C++標准演變了許多年。C++模板是近幾年來對此語言的一種擴展,模板是根據類型參數來產生函數和類的機制,有時也稱模板為「參數化的類型」。使用模板,可以設計一個對許多類型的數據進行操作的類,而不需要為每個類型的數據建立一個單獨的類。標准模板庫(Standard Tempalte Library,STL )和微軟的活動模板庫(Active Tempalte Library,ATL )都基於這個C++語言擴展。
C++標准可分為兩部分, C++語言本身和C++標准庫。C++標准庫對於Visual C++是相當新的,實際上微軟只是在發布Visual C++ 5.0時去除了一些「bug」。標准庫提供了標準的輸入/輸出、字元串、容器(如矢量、列表和映射等)、非數值運算(如排序、搜索和合並等)和對數值計算的支持。應該說, C/C++包含了相對少的關鍵字,而且很多最有用的函數都來源於庫,C++標准庫實現容器和演算法的部分就是STL。
STL是數據結構和演算法的一個框架,數據結構包括矢量、列表和映射等,演算法包括這些數據結構的查找、拷貝和排序等。1994年7月,ANSI/ISO C++標准委員會投票決定接受STL為C++標准庫的一部分,這個建議是根據Alex Stepanov、Meng Lee和David Musser這三人的編程和軟體庫研究提出的。STL的產生是為了滿足通用性的設計目標,而不是為了提高性能。
那麼微軟對C++標準的態度怎什麼樣?微軟運行VC++與Plum-Hall C++,想比較得到的分數在92%和93%之間。為什麼不是100%的一個原因是跟蹤這個標准並同時建立一個編譯器比較困難,微軟也考慮了對現有編碼兼容的重要性,有時他們不得不偏離標准以保持這個兼容性。
17.1.2 使用C++的原因
應該有充分的理由使用C++創建伺服器組件,而不只是為了給上司一個好印象才使用C++。如果以前沒用過C++,你必須要盡力學習。
1. 性能
性能有個兩方面,演算法速度和機器代碼效率。一個演算法可以定義為數據通過系統的概念化的路徑,它描述一些點,在這些點上,數據能夠被操作並可轉換產生某個結果。例如,一個演算法定義為獲取一個字元串,計算字元串中的字元個數,並作為結果返回的過程。演算法與
語言是獨立的,所以在編程之前必須設計演算法,編寫一個快速程序的第一個步驟是設計良好的演算法,能以最少的操作步驟得出問題的答案。第二個步是選擇語言,這也影響程序的速度。
從性能的角度考慮,用匯編語言編寫程序是最佳的選擇,它是計算機能理解的自然語言。但是,幾乎沒有人用匯編語言編寫完整的程序,因為這樣做極其乏味。另一個最佳的選擇是C語言。然而,由VC++提供的所有工具都產生C++,而不是C。使用VC++的向導可以生成大量的使用代碼,而不必人工地編寫代碼。從編寫程序的難易程度和程序的性能綜合考慮, C++是最佳的選擇。
C++性能良好,因為它被編譯為機器代碼。對於VBScript和Java等語言,代碼在運行時由程序解釋,而且每次運行程序時都要將代碼轉換為機器碼,這樣做效率比較低,不僅僅是已編譯過的C++程序運行得較快,而且微軟C++編譯器已存在多年。這意味著微軟的編譯器程序員已經把許多優點集中到編譯器上,以致於它能產生非常高效的機器碼。因為C++是編譯語言,而且非常自然,比VB更接近機器代碼,所以由C++編譯器產生的代碼一定比VB的編譯代碼效率更高。
2. 錯誤處理
一個好的程序與一個偉大的程序的區別就是其是否具有良好的錯誤處理支持。實際上,如果在實現中首先進行錯誤處理,而不是在最後才進行,那麼整個程序的開發和測試過程會更加完美。但是,錯誤處理只能與語言所支持的內容相一致。
VBScript具有基本的錯誤處理支持功能。在默認情況下,不能捕獲VBScript中的錯誤。每次懷疑產生錯誤時,要調用On Error Resume Next功能,並檢查Error對象。
而C++中的錯誤處理比較好,這是因為有「異常處理」,本章的後面部分將詳細介紹。
3. 最小的依賴性
正如上面所說,C++是一種編譯語言,即C++代碼在執行之前已轉換為機器碼。只要此代碼不依賴於外部的動態鏈接庫(DLL),C++就可以在不需要安裝額外程序的情況下移動到運行同樣操作系統的其他機器和微處理器上,而移動Java程序時需要先安裝Java運行期庫。
4. 利用現有的代碼
由於C和C++已經存在許多年了,現在有許多可利用的代碼,你的伺服器組件可以使用現有的C/C++代碼或庫。例如統計庫和到老系統的C介面。
5. 最大化COM特徵
COM與C++很接近,實際上, Don Box(COM的權威)在他的《Essential COM》一書的第一章寫道:「COM就是更好的C++」。他說明了COM規范是如何從C++語言規律中產生出來的。通過理解C++,會對COM有更深的理解。
某些語言不能利用所有的COM特徵,而在C++中,幾乎可以使用所有的COM特徵。
17.1.3 不使用C++的原因
知道什麼時候使用C++是重要的,同樣,知道什麼時候不使用C++也是重要的。想像一下那些長期維護代碼的人,如果他們中沒有一些C++程序員支持C++,那麼開發者們不得不把眼光轉向另外一些他們熟悉的語言。
改變C++組件時,為了看到這些改變的結果,必須重新編譯該組件代碼,這會花費很長的開發時間。C++不能像ASP頁面代碼那樣,只使用記事本,改變代碼的一行,重新裝載而得到結果。因此,如果某些工作需要經常變化(如原型),不要用C++。
在C++中,對一些致命的錯誤不能獲得更多的保護,寫一個使組件崩潰的代碼是很容易的。這是為了提供快速代碼而付出的代價, C++不會停下來去檢查代碼是否按設計運行能否使程序不崩潰依賴於開發者的技巧。如果在這方面花的時間較少或剛剛學習C++,最好不要使用C++。等到已經意識到C++中所有容易犯的錯誤,而且在檢測組件之前花了許多時間,才可以使用C++,如果想很快、很容易地建立一個組件,而且也不考慮該組件的執行速度,那麼使用VB吧!
17.1.4 把ASP技巧轉到C++上
學習新東西的最好方法就是利用現有的技巧。對於ASP開發者來說,已經學習了C++所要求的許多技巧,特別是,JScript語法和ActiveX或COM的面向對象編程的概念。
1. JScript
大部分ASP開發者都用JScript在瀏覽器上使用DHTML。JScript的語法與C非常相似,所以,如果懂得JScript,那麼就懂得基本的C語法。當然,只是C++語法的子集。C++有許多額外的語法來支持面向對象編程,這就是我們下一步要做的。
2. 面向對象編程
如果你在VB中使用過類(class),則對任何COM對象和文檔對象模型(Document ObjectModel,DOM )都應熟悉,因為已經有了面向對象編程(OOP)的概念。在前面已經說過, C和C++的區別是C++支持面向對象編程。
Ⅵ C程序的基本組成單位是
C語言基本組成單位是函數。
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
一個程序往往由多個函數組成,但總是從主函數開始,語句可以是函數體的內容。
(6)編程函數名的本質驗證擴展閱讀:
C程序函數的理解:
1、函數的本質:C語言中函數的代碼存儲在內存中的代碼段中,每一個C語言程序都會有一個代碼段。本質是一段二進制可執行代碼,這些代碼可以被機器直接執行的指令。函數名,本質是一個標號,該標號的值等於內存中存儲函數代碼的內存空間首地址。
2、變數的作用域和生命期:C語言中的每一個變數都有自己的作用域和生命期,主要是存儲的位置不同,決定了它們的生存周期不同。局部變數主要存放在棧幀上,而全局變數和static 修飾的變數都存放在數據段上。
參考資料:網路-C語言
Ⅶ 編程里的函數是什麼樣得
數學的函數從集合上被解釋成映射,它是值的一種特定變換
在編程里,函數有類似功能:
返回值 = 函數名(參數1,參數2,…)
可以看成,將一系列的參數進行某種運算,再把得到的結果返回保存;
但也有更多的不同:
編程里的函數有過程性,即在「加工數據」的同時,能對外界的數據進行操作,也能中途進行輸入輸出等;
它更像是生活中的很多事物,既有數學性,也有過程性。舉個形象的的例子,假如你在做菜,突然發現沒鹽,於是就要停下手頭的事去買鹽,在編程中我們叫調用了一個函數。你買鹽的結果,是得到了一包鹽,並將其返回,這個「函數」就完成了,但在買鹽的過程中,你還可能遇到一些情況。比如忘了帶錢,這時你又要調用「回家拿錢」函數;也可能順路跟鄰居拉拉家常;還可能從廣告板上有獲得了幾條信息……
就是這樣,跟生活中的道理是一樣的,這些都可能發生在編程的函數中。
編程里的數據是實實在在儲存在內存上的,它們的儲存方式在計算機基礎中有介紹。而編程說到底是在「控制」計算機,由此它裡面的許多概念也就有了它獨特意義和原理;你似乎是初學,我只能形象地說一說了,說多了對你也沒幫助。相信隨著你的深入學習,會有更好理解。
Ⅷ c語言定義函數它只識別數字嗎
C源程序是由函數組成的。最簡單的程序有一個主函數 main(),但實用程序往往由多個函數組成,由 主函數調用其他函數,其他函數也可以互相調用。函數是C源程序的基本模塊,程序的許多功能是通過對 函數模塊的調用來實現的,學會編寫和調用函數可以提高編程效率。
函數的定義通鋒廳常包含以下內容:
返回值類型 函數名(形參表說明) /*函數首部*/
{
說明語句 /*函數體*/ 報考指南
執行語句
}
對上面的定義形式進行以下說明:
(1)「返回值類型」是指函數返回值的類型。函數返回值不能是數組,也不能是函數,除此之外任何合法的數據類型都可以是函數的類型,如:int,long,float,char 等。函數類型可以省略,當不指明函數類型時,系統默認的是整型。
(2)函數名是用戶自定義的標識符,在 C 語言函數定義中不可省略,須符合 C 語言對標識符的規范, 用於標識函數,並用該標識符調用函數。另外函數名本身也有值,它代表了該函數的入口地址,使用指針 調用函數時,將用到此功能。
(3)形參又稱為「形式參數」。形參表是用逗號分隔的一組變數說明,包括形參的類型和形參的標識 符,其作用是指出每一個形參的類型和形參的名稱,當調用函數時,接收來自主調函數的數據,確銀拿隱定各參 數的值。
(4)用{ }括起來的部分是函數的主體,稱為函數體。函數體是一段程序,確定該函數應完成的規定的 運算,應執行的規定的動作,集中體現了函數的功能。函數內部應有自己的說明語句和執行語句,但函數 內定義的變數不可以與形參同名。花括弧{ }是不可以省略的。
根據函數定義的一般形式,可以定義一個最簡敏伏單的函數:
這是 C 語言中一個合法的函數,函數名為 add。它的函數返回值為int,沒有形參表,同時函數體內只有一條因為返回值為int而必須有的返回值語句。實際上函數 add 不執行任何操作和運算,它是一個空函數,在一般情況下是沒有用途的,但 在程序開發的過程中有時是需要的,常用來代替尚未開發完畢的函數。
Ⅸ c語言編程的函數名都是怎麼定的
英文縮寫、漢語拼音、其它想要的字元串,只要符合C的標識符使用規則的都可以做為自定義函數名稱。