黑馬程式設計師——c語言部分基礎
c語言是一種古老但是依然屹立在眾多強勢程式語言中的佼佼者,它提供一種能以簡易的方式編譯、產生少量的機器嗎以及不需要任何執行環境支援便能執行的程式語言。oc是完全相容c語言的一種面嚮物件語言,所以,學好c語言是進階oc的必經之路,話不多說,讓我們看看c語言的一些基礎知識。
函式
c語言中的函式大致分為3種:主函式,使用者自定義函式,系統提供的函式庫函式。
主函式:也稱main函式,一個c程式必須由主函式開始執行,主函式有且只能有一個。
使用者自定義函式:可有可無,數量不限。
那麼如何定義一個函式呢?
無引數函式定義如下:
返回值型別 函式名()
{
//在函式體中實現函式的功能
函式體;
//如果返回值不是void,需要return 語句,用來返回這個函式操作的結果
}
比如定義一個加法函式:
這裡值得注意的是scanf語句,從鍵盤上讀取資料時要注意讀取的格式,如果兩個佔位符之間有空格,那麼輸入資料也要加上空格。
有引數函式的定義:
返回值型別 函式名(引數列表)
{
//在函式體中實現函式的功能
函式體;
//如果返回值不是void,需要return 語句,用來返回這個函式操作的結果
}
這裡值得注意的是,引數列表要註明引數的資料型別
比如定義一個加法
引數分為實際引數和形式引數,那麼什麼是實際引數,形式引數?
函式名後面括號中傳遞的是形式引數,在函式呼叫中傳入的引數是實際引數。
既然說到函式,自然會想起很多耳熟能詳的函式庫函式,下面簡要介紹兩個
printf:
它是c語言函式庫函式,作用是在螢幕中輸出資料。
printf(“study c language\n”); //輸出字串“study c language”,\n表示換行
printf(“my age is %d”, 22); //%d是佔位符,表示要輸出的是int型別的資料,後面傳入相應資料型別的資料,這裡傳入的是22
printf(“my height is %.2f”, 1.83);//這裡要傳入float型別的資料,保留小數點後兩位,這裡傳入的是1.83
scanf:
它也是c語言函式庫函式,作用是從鍵盤讀取資料
int a;
scanf(“%d”, &a); //&是取地址符,顧名思義,就是讀取地址,把輸入的資料儲存到這個地址中
這兩個函式都是stdio.h中函式,使用之前應該在開頭加上一句,#include<stdio.h>
基本資料型別
可分為如下幾類:
基本資料型別:整型 int。浮點型 float , double。字元型 char。
指標型別:void*。
構造型別:陣列,結構體,共用體,列舉。
先說基本資料型別吧:不同型別的資料佔據的記憶體是不同的,以16位編譯器為例,int 佔2個位元組,float 佔4個位元組,double 佔8個位元組,char佔1個位元組。
這裡給char型別資料賦值時有兩種方法:
char character = 65; //這裡65代表ascii 碼中的第65個字元,a
char character = ‘a’; //直接賦值
還有幾種常見錯誤寫法:
char c1 = ‘我’; //漢字不在ascii碼中,不能賦值給char變數
char c2 = ‘123’; //123是字串
char c3 = “123”; //它只能接受一個字元
陣列:
陣列其實很簡單,也沒什麼說的,作為c語言的一個知識點,我就介紹一下動態陣列的使用吧。
動態陣列,在宣告時沒有確定陣列大小的陣列,當要用它時,可隨時用malloc重新指出陣列的大小。
什麼時候會用到動態陣列呢?所需的記憶體空間取決於實際輸入的資料,而無法預先確定。
示例程式碼如下:
指標:
想要理解指標,先要理解變數賦值的底層過程,當我們宣告一個變數時,系統會空出一塊地址空間(空間大小取決於變數的資料型別),賦值的時候,直接把資料儲存到記憶體中。
再學習指標之前,先了解兩個概念:直接引用,間接引用。
什麼是直接引用?通過變數名來讀寫資料
什麼是間接引用呢?首先將一個變數的地址存放在另一個變數中,然後通過另一個變數來間接引用這個變數。
示例程式碼如下:
值得注意的是:指標很危險,當你對指標操作時,一定要先指向某個變數再對指標操作,否則會造成野指標,亂修改記憶體中的資料。
指標的應用:交換兩個變數的值
我們發現a和b的值並沒有交換,這是為什麼呢?
問題出在傳遞的引數上,要想修改變數的值(其實是修改地址中儲存的值,所以需要傳遞地址),需要把引數的地址傳給函式,我們可以這樣修改函式。
下面就開始我的oc之旅,哈哈。