前言 什麼是操作系統:操作系統是一種系統軟體,用來管理電腦的軟硬體資源。 主流操作系統: 移動攜帶型設備:Android、iOS、Windows Phone、Symbian(塞班)、Black Berry(黑莓) OS PC個人電腦:Windows、Mac OS、Unix、Linux 什麼是iOS ...
前言
- 什麼是操作系統:操作系統是一種系統軟體,用來管理電腦的軟硬體資源。
- 主流操作系統:
移動攜帶型設備:Android、iOS、Windows Phone、Symbian(塞班)、Black Berry(黑莓) OS
PC個人電腦:Windows、Mac OS、Unix、Linux
- 什麼是iOS:iOS是一款由蘋果公司開發的移動操作系統(iOS運行在移動攜帶型設備上)
- 什麼是iOS開發:就是開發運行在iOS系統上的應用或游戲軟體,如:QQ、淘寶、憤怒的小鳥等。
- Mac OS文件系統:對文件進行管理的系統叫文件系統
UNIX常用命令:
查看命令的詳細幫助: man 命令名 (比如要看看 ls 命令的詳細用法,執行 man ls)
pwd (print work directory):列印當前目錄(工作目錄) 目錄 == 文件夾
cd (change directory)
cd / 進入根目錄
cd Users 進入用戶目錄
cd tarena 進入用戶的主目錄(Home Directory)
ls (list) :列出當前目錄下的所有內容
ls -a //-a 即all,列出目錄下的所有文件(包括以.開頭的隱含文件)
ls -l //-l 列舉文件的詳細信息(文件名、許可權、所有者、文件大小等)
mkdir 創建目錄(文件夾)
touch 創建文件
who 顯示當前用戶名
clear 清屏
touch xxx.m 新建xxx.m文件
open xxx.m 打開xxx.m文件
在根目錄下使用ls列出所有內容:
Applications 放所有的應用程式
Library 應用程式需要的其庫等內容
Network 網路相關
System 系統相關
Users 用戶的目錄
常用目錄或路徑:
主目錄(Home Directory):一個用戶有一個自己的主目錄,用戶在此目錄下擁有很高的許可權。
/ 根目錄(Root Directory):只有一個,代表整個硬碟
特殊路徑: / 根路徑 ./ 當前路徑 ../ 上一級路徑
Desktop 桌面
Documents 文稿
Downloads 下載
Library 其他
Movies 影片
Music 音樂
Pictures 圖片
Public 公共目錄
註意:按一下tab鍵,可以自動補齊指令名稱、文件夾、文件夾名等。
C語言的特點
- 豐富的運算符
- 豐富的數據類型
- 可以直接操作硬體
- 高效的目標代碼
- 可移植性好
C語言的用途
- 編寫系統軟體、圖形處理、單片機程式、嵌入式系統開發甚至是用於科研
- 編寫游戲外掛
- 編寫android程式
- 編寫iOS程式
C語言的編譯器
- gcc GNU Compiler Collection(GNU編譯器套件),GNU組織開發的開源免費的編譯器。
( gcc 原名為 GNU C Compiler,只能處理C語言,後來GCC很快地擴展,也可以處理C++、Objective-C、Java等其它語言)
- clang 開源的BSD協議的基於LLVM的編譯器;蘋果公司自己的編譯器。
(LLVM可以作為多種語言編譯器的後臺來使用,前端用clang)
C語言的版本問題
- 1983年美國國家標準局(American National Standards Institute,簡稱ANSI)成立了一個委員會,開始制定C語言標準的工作
- 1989年C語言標準被批准,這個版本的C語言標準通常被稱為ANSI C
- 1999年,國際標準化組織ISO又對C語言標準進行修訂,在基本保留原C語言特征的基礎上,針對應該的需要,增加了一些功能,命名為C99
- 2011年12月8日,ISO正式公佈C語言新的國際標準草案:C11
C語言的官方標準
- ANSI C / C89標準:1989年,美國國家標準協會(ANSI)發佈了第一個官方標準(簡稱 C89標準 或 ANSI C)。
- C99標準:1999年,國際標準化組織(ISO)和國際電工委員會(IEC)發佈了C語言的新標準。
- C11標準:2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC)再次發佈了C語言的新標準。
C語言程式的運行過程
一、編譯:編譯是由編譯器來執行的,主要做的時語法檢查工作;將C源程式翻譯成電腦能識別的0和1。
- 使用什麼編譯器:Xcode3使用GCC,Xcode4使用LLVM編譯器(前端用clang)
- 如何使用clang編譯器編譯程式:
- 在終端中輸入:cc –c 文件名.c
- 編譯成功,會生成.o目標文件
- 編譯器的錯誤和警告功能
- 如果代碼有語法問題,編譯器會直接報錯。並指出錯誤的個數和具體行號。
- 只要有1個錯誤,程式就不能編譯成功,也不會生成.o文件
- 警告信息只是編譯器的一些建議,並不影響編譯通過
二、鏈接:將自己編譯好的.o目標文件和C程式庫函數組合在一起,生成可執行文件。
由鏈接器完成,clang編譯器裡面已經包含了鏈接指令
- 在終端中輸入:cc 文件名.o
- 鏈接成功,會生成a.out可執行文件
三、運行:兩種運行方式:
- 直接雙擊打開a.out文件
- 終端中使用 ./a.out 指令
修改文件內容之後,一定要重新編譯、鏈接,再運行。
其他clang指令:
- 修改可執行文件a.out的名稱:cc xxx.o -o 新文件名
- 一起編譯、鏈接:cc xxx.c
整個程式的運行過程:編寫源程式==>預處理==>編譯器==>連接器==>可執行
註意:gcc可換為clang(CC); gcc -E test.c 查看編譯前文件內容 (-E的意思是:做預處理)
- 預處理:gcc -E test.c -o test.i (預處理的結果可以用-o的方式保存到一個文件test.i中)
- 編譯:gcc -c test.i //編譯成功,會生成.o目標文件; 1,2可以合併:gcc -c test.c
- 連接:gcc test.o
- 執行:./a.out
- 簡寫:gcc test.c (1,2,3的合併)
- 執行:./a.out
用Xcode創建項目
- Product Name:產品名稱
- Organization Name:公司名稱
- Company Identifier :公司唯一標識,一般為公司官網網址的倒序
- Bundle Identifier:產品唯一標識
- Type(Language):項目語言類型
C語言程式是由函數構成的,C程式的入口是main函數。函數內部代碼的執行順序,是從上到下執行的,如瀑布一樣。
錯誤類型:
- 語法錯誤:編譯器會直接報錯
- 邏輯錯誤:沒有語法錯誤,只不過運行結果不正確
關鍵字
C語言程式是由英文單詞構成的,其中有些單詞被C語言賦予了特殊含義,那麼這些單詞就是關鍵字。
C語言的系統保留字(32個關鍵字)
- 基本數據類型(5個):void、int、float、double、char
- void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果
- int:整型數據,通常為編譯器指定的機器字長
- float:單精度浮點型數據,屬於浮點數據的一種
- double:雙精度浮點型數據,屬於浮點數據的一種
- char:字元型類型數據,屬於整型數據的一種
- 類型修飾關鍵字(4個):short、long、signed、unsigned
- short:修飾int,短整型數據,可以省略被修飾的int
- long:修飾int,長整型數據,可以省略被修飾的int
- singed:修飾整型數據,有符號數據類型
- unsigned:修飾整型數據,無符號數據類型
- 複雜類型關鍵字(5個):struct、union、enum、typedef、sizeof
- struct:結構體聲明
- union:共用體聲明
- enum:枚舉聲明
- typedef:聲明類型別名
- sizeof:得到特定類型或特定類型變數的大小
- 存儲級別關鍵字(6個):auto、static、register、extern、const、volatile
- auto:指定為自動變數,由編譯器自動分配及釋放,通常在棧上分配空間;修飾局部變數,預設省略不寫
- static:指定為靜態變數,分配在靜態變數區,修飾函數時,指定函數作用域為文件內部
- register:指定為寄存器變數,建議編譯器將變數存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
- extern:指定對應變數為外部變數,即標示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義
- const:與volatile合稱“cv'特性”,指定變數不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
- volatile:與cost合稱“cv特性”,指定變數的值有可能會被系統或其他線程/進程改變,強制編譯器每次從記憶體中取得該變數的值
- 流程式控制制關鍵字(12個)
- 跳轉結構(4個):return、continue、break、goto
- return:用在函數體中,返回特定值(或void值,即不返回值),作用:結束函數
- continue:結束當前迴圈,開始下一輪迴圈
- break:跳出當前迴圈或switch結構
- goto:無條件跳轉語句
- 分支結構(5個):if、else、switch、case、default
- if:條件語句,後面不需要放分號
- else:條件語句否定分支(與if連用)
- switch:開關語句(多重分支語句)
- case:開關語句中的分支標記
- default:開關語句中的“其他”分支,可選
- 迴圈結構(3個):for、do、while
for:for迴圈結構,for(1;2;3)4;的執行順序為1->2->4->3->2…迴圈,其中2為迴圈條件
do:do迴圈結構,do 1 while(2);的執行順序是1->2->1…迴圈,2為迴圈條件
while:while迴圈結構,while(1)2;的執行順序是1->2->1…迴圈,1為迴圈條件
標識符
標示符就是程式員自己在程式中起的一些名字。(常見的是:變數的名稱和函數的名稱)
- 命名規則:(一定要遵守)
- 只能由26個英文字母的大小寫、10個阿拉伯數字0~9、下劃線_組成
- 嚴格區分大小寫,比如test和Test是2個不同的標識符
- 不能以數字開頭
- 不可以使用關鍵字作為標識符
- 命名規範:(最好要遵守)
- 儘量起個有意義的名稱,一般用英文單詞,註意長度適中,可讀性要強。
- 如果標識符中含有多個單詞,可以使用駝峰標識(除開第一個單詞,後面每個單詞的首字母都是大寫):
- firstName、myFirstName,或者使用下劃線_來連接:first_name、my_first_name
- 一般情況下,
- 變數名:每個單詞首字母大寫;
-
函數(方法):第一個單詞的首字母小寫,其它單詞的首字母都大寫。
(如:UserName PassWord showMessage isPrint)
數據
- 靜態數據:是指一些永久性的數據,一般存儲在硬碟中。
- 動態數據:是指在程式運行過程中,動態產生的臨時數據,一般存儲在記憶體中。
- 當運行某個程式(軟體)時,整個程式就會被載入到記憶體中,在程式運行過程中,會產生各種各樣的臨時數據,這些臨時數據都是存儲在記憶體中的。當程式停止運行或者電腦被強制關閉時,這個程式產生的所有臨時數據都會被清除。
- 你可能會問:既然硬碟的存儲空間這麼大,為何不把所有的應用程式載入到硬碟中去執行呢?有個主要原因是記憶體的訪問速度比硬碟快N倍。
- 數據的轉換
- 靜態數據到動態數據的轉換(也就是從磁碟載入到記憶體)
- 動態數據到靜態數據的轉換
- 如:手機拍照片存儲到手機的硬碟上
- 數據的大小
- 不管是靜態還是動態數據,都是0和1組成的。
- 數據都有大小,靜態數據就會占用硬碟的空間,動態數據就占用記憶體的空間
- 數據越大,包含的0和1就越多,比特位和位元組
- 計量單位:
1 B = 8 bit
1 KB = 1024 B, 1 MB = 1024 KB
1 GB = 1024 MB, 1 TB = 1024 GB
變數
- 概念
是記憶體中的一片空間。用來保存程式運行期間的臨時數據。
有名字,有類型
有名字,就可以重覆使用
變數的類型決定著變數占用多大的記憶體空間。
- 聲明(定義)變數
int x; 定義一個int類型的,名字叫x的變數
- 變數的初始化
第一次給變數叫初始化
最好不要使用沒有初始化過的變數
#include <stdio.h> int main() { int x;//x是變數名,int是變數的類型 printf("x=%d\n", x); //x=1606422582,垃圾數據 x = 10; //將10保存到x中,第一次賦值相當於初始化 x = 20; //將20保存到x中,以後就叫給變數賦值 int y = 30;//定義變數的同時初始化 printf("y=%d\n", y); return 0; } |
變數的類型
分兩種:基本類型, 自定義類型
- 基本類型
整形:
有符號:可以是正數,也可以是負數。
int // signed int
short int 短整形
long int 長整形
long long int
無符號:只能是正數,不能是負數
unsigned int
unsigned short int
unsigned long int
unsigned long long int
特殊整形:
char
unsigned char
浮點型:全部是有符號
float
double
long double
- 自定義類型: struct, union, enum
- 數據的保存(二進位)
1Byte = 8bit
1KB = 1024Byte
1MB = 1024KB
…
- 類型的區別
short int 2Bytes 16bit
int 4Bytes 32bits
long int 8Bytes 64bit(64位系統) 4Bytes(32位系統)
long long int 16Bytes
占用記憶體空間多,表示的數據的範圍就廣
註意:int類型前面有其它修飾時,int可以省略。
bool 表示布爾運算,只包含true和false兩個數值。需要在文件中加入如下語句: #include <stdbool.h>
數據類型
對應記憶體區域,其值可變,變數有相應的類型和值。
變數類型分為字元型char、整數型int、浮點型float/double、指針、結構、聯合等類型。
#include <stdio.h> int main() { float f=3.14; printf("f=%f\n", f);//f=3.140000 double d=1.73; printf("d=%lf\n", d);//d=1.730000;預設都列印6位小數 printf("f=%.2f\n", f);//保留兩位小數 printf("sizeof(float)=%ld\n", sizeof(float)); //表示數據的範圍很大,內部使用了科學計數法來表示 //3.14:3.14×10^0 //0.00314:3.14×10^-3 //省略無意義0 f=.314;//f=0.314000 f=3.;//f=3.000000 f=3.14E-3;//3.14×10^-3; printf("f=%f\n", f);//f=0.003140
f=3.14F;//float類型的字面值後面加f,F f=3.14f; f=0x314F;//F代表十六進位的F return 0; } |