自學iOS開發系列 C語言(記憶體及字串)

2021-07-24 17:00:34 字數 3666 閱讀 3759

一、記憶體

1.記憶體分配

靜態記憶體分配:記憶體空間分配在棧,資料段,**段。分配之後只能由系統釋放,不能通過程式修改空間大小和釋放空間,稱為靜態記憶體分配。所分配記憶體空間的帶下,在【編譯】時確定,在【執行】時無法修改。

【編譯】:把我們的**翻譯成機器能夠執行的機器碼。

【執行】:機器按照編譯完的機器碼去執行。

動態記憶體分配:記憶體空間分配在棧空間,大小由程式設計師自己決定,可以通過**對空間大小進行修改,通過**對空間進行釋放。這樣分配的空間稱為動態記憶體分配。

2.動態記憶體和靜態記憶體分配的區別

靜態記憶體分配:

①由系統建立,由系統釋放;

②分配在棧,資料段,制度資料段;

③編譯時確定大小,執行時無法修改;

④自動釋放

動態記憶體分配:

①由程式設計師建立,由程式設計師釋放

②分配在堆上;

③執行時建立大小,執行時可以修改;

④手動釋放

3.動態記憶體分配概念及注意事項

①概念【開闢空間】將一段空間在系統中註冊為已經被占用

【釋放空間】到系統中,解除註冊,這個空間就變成了自由空間(釋放空間並不會把內部資料清除

②注意事項

【記憶體洩露】一直占用記憶體空間

【重複釋放】釋放多次

【提前釋放】在釋放之後還是用這個空間

4.手動開闢乙個記憶體空間並在使用完釋放

匯入#include標頭檔案#include

#include 

#include

int main(int argc, const

char * argv)

//堆空間使用完畢,必須釋放,

free(p);

return

0;}

5.記憶體圖

二、字串

1.字串就是一串字元,字串中的每個字元佔1個位元組,字元的個數比可視的字元多乙個。在字串結尾處有乙個』\0』,稱作【尾零】。其ascii值就是0。

char *p = 「hello world」;//該字串中有12個字元,11個有效字元(可視字元)

2.網路傳輸資料的檔案格式有兩種json和xml,它們都是字串。

3.字串常用函式

匯入標頭檔案#include

#include 

#include

int main(int argc, const

char * argv)

②拷貝字串:char * strcpy(char * s1, const char * s2),將字串s2拷貝到字元陣列s1中,返回s1,即字元陣列的首元素位址(使用這個函式的前提是s1有足夠大的空間,如果越界,可能導致未知錯誤)

char a[200] = "他悄悄的走了,正如他悄悄的來";

char *p = "揮一揮衣袖,不帶走一片雲彩";

strcpy(a,p);

printf("%s\n",a);

③拼接字串:char * strcat (char * s1, const char * s2),s1是乙個字元陣列,s2是乙個字串或字元陣列,將s2的內容拼接到s1後面,儲存在s1中,返回s1。

char a[200] = "春水初生,春林初盛,春風十里 ,";

char * p = "不如你!";

printf("%s\n",strcat(a, p));

④查詢並擷取字串:char * strstr(const char *s1, const char *s2),在字串s1中,尋找子串首次出現的位置。返回子串在s1首次出現的位置的第乙個字元的位址,如果沒有找到,就返回乙個空位址。

char *s1 = "aaabb123bccc1234";

char *s2 = "123";

char *s3 = "123456";

printf("%s\n",strstr(s1,s2));

printf("%s\n",strstr(s1,s3));

⑤比較兩個字串的大小關係:int strcmp(const char * s1, const char * s2),s1大返回證書,s2大返回負數,相等返回0

char * s1 = "abcdexyz";

char * s2 = "bcdefyza";

int differ = strcmp(s1, s2);

if (differ < 0) else

if (differ > 0) else

⑥分割字串:char * strtok(char * s, const char * sep),將字串分割成乙個個子串。

char a[200] = "c oc ios swift";

char * p = strtok(a," ");

while (p != null)

小練習:

1.將這個字串按照單詞逆序i love you forever輸出forever you love i

2.輸入乙個字串,清除字串中所有的標點符號:輸入」hello,world!」,輸出 helloworld

1.將這個字串按照單詞逆序i love you forever輸出forever you love i

#include 

#include

int main(int argc, const

char * argv) ;

char ret[64] = {};

char* p = strtok(buf, " ");

int i = 0;

while (p!=null)

for (int j = i - 1; j >= 0; j--)

printf("%s\n",ret);

return

0;}

2.輸入乙個字串,清除字串中所有的標點符號:輸入」hello,world!」,輸出 helloworld

#include 

#include

int main(int argc, const

char * argv) ;

strcpy(h, a);

char ret[64] = {};

char* p = strtok(h, " ,!");

while (p!=null)

printf("%s\n",ret);

return

0;}

自學iOS開發系列 C語言(陣列)

c語言的編譯和執行 開啟終端輸入 touch arr.c open arr.c 在開啟的檔案中輸入 include int main int argc,const char argv command s儲存 gcc o arr arr.c arr 終端輸出hello world 陣列 一 一維陣列 ...

自學iOS開發系列 OC(block)

1.block 塊語法,是一種新的語法結構。學習的時候可以模擬於函式指標。2.block和函式指標對比 import 宣告函式 int add int,int int main int argc,char argv nslog d block 3,6 實現函式 int add int a,int b...

IOS開發系列 C語言之指標

指標是c語言的精髓,但是很多初學者往往對於指標的概念並不深刻,以至於學完之後隨著時間的推移越來越模糊,感覺指標難以掌握,本文通過簡單的例子試圖將指標解釋清楚,今天的重點有幾個方面 什麼是指標 陣列和指標 函式指標 存放變數位址的變數我們稱之為 指標變數 簡單的說變數p中儲存的是變數a的位址,那麼p就...