[go: nahoru, domu]

删除的内容 添加的内容
标签撤销 移动版编辑 移动版网页编辑 高级移动版编辑
Yunyiyang留言 | 贡献
合并参考资料项目
第58行:
* C語言是一個有結構化程式設計、具有变量作用域(variable scope)以及遞迴功能的程序式語言。
* C語言傳遞參數均是以值傳遞(pass by value)<ref>{{ Cite book | author = Brian W. Kernighan and Dennis M. Ritchie | title = The C programming Language | publisher = Prentice-Hall | date = 1988 | ISBN = 0-13-110362-8 | language = en | quote = In C, all function arguments are passed ``by value.'' }}</ref>,另外也可以傳遞指针(a pointer passed by value)。
* 不同的變數類型可以用結構体(struct)組合在一起。<ref name="k&r中文"> {{Cite book | author = Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = 中文 }} </ref>
* 只有32個保留字(reserved keywords),使变量、函數命名有更多彈性。<ref> {{Cite book | author name= Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = "k&r中文 }} <"/ref>
* 部份的变量類型可以轉換,例如整數型和字符型变量。<ref> {{Cite book | author name= Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = "k&r中文 }} <"/ref>
* 通過[[指標 (電腦科學)|指標]](pointer),C語言可以容易的對記憶體進行低階控制。<ref> {{Cite book | author name= Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = "k&r中文 }} <"/ref>
* 编译预处理(preprocessor)讓C語言的編譯更具有彈性。<ref> {{Cite book | author name= Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = "k&r中文 }} <"/ref>
 
== 歷史 ==
第96行:
 
=== 进一步了解 ===
C语言由函数和变量组成,C的函数就像是[[Fortran]]中的子程序和函数<ref> {{Cite book | author name= Dennis M. Ritchie,Brian W. Kernighan | title = C程序设计语言 | url = https://archive.org/details/cchengxushejiyuy0000kern | location = 北京 | publisher = 机械工业出版社 | date = 2004年1月 | ISBN = 9787111128069 | accessdate = 2020-06-10 | language = "k&r中文 }} <"/ref><ref name="C18">{{Cite web |url =http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}</ref>。
 
在C语言中,程序从 [[主函式#C/C++|<code>main</code>]] 开始执行。<code>main</code> 函数通过调用和控制其他函数进行工作。例如上面的<code>printf</code>。程序员可以自己写函数,或从库中调用函数。在上面的<code>return 0;</code> 使得 <code>main</code> 返回一个值给调用程序的[[壳层]],表明程序是否成功运行。
第112行:
}
</syntaxhighlight>
<ref name="C18"/>
<ref>{{Cite web |url =http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}</ref>
复合语句可以使得几个语句从文法上变成一个语句。
 
第182行:
 
=== 循環語句 ===
C語言有三種形式的循環語句<ref name="C18"/>:
C語言有三種形式的循環語句<ref>{{Cite web |url =http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}</ref>:
<syntaxhighlight lang="c">
do
第217行:
 
=== 跳轉語句 ===
跳轉語句包括四種:<tt>goto,continue,break和return</tt><ref>{{Cite web |url name=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}<"C18"/ref>。
 
<syntaxhighlight lang="c">
第272行:
 
==== 指针 ====
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量<ref>{{Cite web |url name=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}<"C18"/ref>。换句话说,该变量存储一个地址,而 *(此处特指'''单目运算符 *''',下同。C语言中另有双目运算符 * 表示乘) 则是取内容操作符,意思是取这个内存地址里存储的内容。把这两点结合在一起,可将 <code>int *a;</code>看作是 “*a 解得的内容类型为 int”,对更复杂的声明也如此{{NoteTag|C 的声明使用这种“解方程”的形式,于是便出现了多种复杂的声明。https://cdecl.org 是一个基于网页的实用“翻译工具”。}}。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
 
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值(不同于<code>return z</code>这样的仅能得到一个返回值。
第326行:
 
=== 函数 ===
C语言的基本结构单位是函数<ref>{{Cite web |url name=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}<"C18"/ref>。系统首先调用 [[主函式#C/C++|main函数(主函数)]],通过函数的嵌套调用,再调用其他函数。函数可以是系统自带的函数,也可以是用户定义的函数。C语言中,不允许函数嵌套定义。
 
== 内存管理 ==
C语言的特色之一是:程序员必须亲自处理内存的分配细节。
 
大多数C语言实现使用栈(Stack)来保存函数返回地址/栈帧基址、完成函数的参数传递和函数局部变量的存储。然而,在部分极特殊的平台上,使用栈并不能获得最大效率。此时的实现由编译器决定<ref>{{Cite web |url name=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |accessdate =2020-06-10 |title =ISO/IEC 9899:2018 |archive-date =2020-07-22 |archive-url =https://web.archive.org/web/20200722132012/http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf |dead-url =no }}<"C18"/ref>。
如果程序需要在运行的过程中动态分配内存,可以利用[[堆]](Heap)来实现。