一、記憶體
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就...