c語言筆記

sp  短信服務商

tencent 騰訊    早期叫OICQ  之前騰訊是最大的sp

 bat  三大巨頭 百度  阿里  騰訊

36kr.com  發佈所有it行業的信息

 

code review  代碼審覈

python  後臺腳本語言

 

週報:自我總結,學習的情況還有建議

 

 

 

mac系統的底層是unix

 

unix 系統(70年誕生)的三個分支 :sco unix   ,  linux (發佈軟件必須提供源代碼),  BSD

 

c語言72年誕生

 

76年創建的蘋果公司   84--96 喬布斯是不在蘋果公司的     這12年做了兩件事,收購了皮克斯公司,創立了電腦公司NEXT .  (next step 操作系統 ,內核是BSD)    但是現在的蘋果系統現在的內核是XNU (x is not a UNIX).

 

 

蘋果公司的市場是封閉      但是技術是開源的    

 

 

語言的發展 BCPL—B   ——NewB ——C

 

 

 

 

 

 

c語言:

 

通過bundle identifier 來標識程序

 

 

 

 

 

char是最小的整型

float 小數位數是六位  double 是15位

 

 

 

 

ASC

 

 

 

 

所有運算符的優先級最高的是括號

 

 

 

 

 

代碼規範:雙目運算加空格   逗號後面加空格

 

 

 

 

int a=100;

a+ +;

a=a+1;

a++的效率高很多

 

 

R 0--255

G 0--255

B 0—255

0,0,0是黑色   255,255,255是白色

 

expect 期望

expression 表達式

 

 

C語言標準  c89/c99裏面沒有輸入輸出的

Printf不是c語言的標準,是添加的庫函數。例如#include<stdio.h>

%d======%i

 

 

\\  輸出\

%% 輸出%

 

 

控制檯調試窗口快捷鍵command+ shif+y

 

 

 

 

 

 

 

 

2014/7/30

主要講 if  switch

 

 

c語言中非0即爲真

 

 

注意邏輯與和邏輯或的短路現象:

與: 當前面的條件不符合時不會再去計算後面的條件

或: 當第一個條件符合時不會再去計算後面的條件

 

 

條件分支的級聯  嵌套

 

 

char a = '\0';

 

浮點數是無法進行相等判斷的。

 

system("say shabi");//語言提示shabi mac系統獨有的系統命令  需要倒入頭文件 #include <stdlib.h>

 

switch(整型表達式){

    case 整型常量表達式 :

    break;

}

如果case裏面定義變量就需要用{}

按住commd+alt+[或者]拖動代碼移動

 

 

枚舉:就是整型常量  而且數值是自增的,第一個設定了後會根據這個值自增。

 

 

僞隨機數:rand()

        srand()種子

真隨機數:arc4random()   返回無符號的整型unsigned int  輸出用%u

 

隨機數%(b-a+1)+a  任意範圍隨機數

 

當判斷條件比較多時可用到break

break 用於跳出整個循環

continue (待續)結束本次循環

 

 

斐波那契數列  1  1 2 3 5 8  13 21 34 ……unsigned int 0

 

 

pow()

 

 

2014/8/1

數組的名字無法修改。是個常量

 

sizeof() 是個運算符 是關鍵字  類型  long  unsuigned

 

代碼規範的作用:代碼整潔,降低溝通成本,避免低級錯誤。

 

 

 

2014/8/4

 

//presentation

//Introduction   1 say hi 2 self-introduction 3 主題

//Body 1 content1 ……

//1 eye contact 2 speak 3 body language 4 自信  5 practice

//conclusion 1 summary 2 thanks 3 Q & A

 

 

陷阱庫-----第一個單詞: redefinition 重定義

 

 

 

 

c99   中對數組定義可以用變量,但是不可以進行初始化。例:int x=20;int array[x];

 

 

 

%g  輸出float時將後面的0都去掉

 

 

宏:#define ,預處理指令,不能加分號結束,不會產生代碼

   #__counter__  產生不重複的數字

   #__NSX_PASTE__

 

宏常量   例:# define PI 3.14

 

帶參數的宏 例:#define MAXVALUE(A, B) ((A) > (B) ? (A) : (B))

 

複合賦值

int c = ({

        int result = a > b ? a : b;

        result;

});

printf("%d\n", c);

 

 

__typeof__(A) 取出A 的類型

 

 

 

相對安全的宏:(如果參數時表達式會出現多次計算)

#define MAXVALUE(A, B) ({__typeof__(A) __a = (A); __typeof__(B) __b = (B); __a > __b ? __a : __b; })

 

 

 

函數不寫返回值默認時int類型的。

 

2014/8/5

//   插入排序

    int array[] = {3, 2, 7, 9, 5, 4, 6, 1};

   

    int count = sizeof(array) / sizeof(array[0]);

    for (int  i = 1; i < count ; i++) {

        int j = i ;

        int temp = array[j];

        for (; j > 0 && temp < array[j - 1]; j--) {//j > 0 && temp < array[j - 1]不能前後調換,否則會導致數組越界。

            array[j] = array[j - 1];

        }

        array[j] = temp;

    }

    for (int i = 0; i < count; i++) {

        printf("%d\n", array[i]);

}

 

 

   // 選擇排序,第一個和所有的比較,把最小的放在最前面

    int array[] = {3, 2, 7, 9, 5, 4, 6, 1};

    int count = sizeof(array) / sizeof(array[0]);

    int min  = 0;

    for (int j = 0; j < count - 1; j ++) {

        min = j;

        for (int i = j; i < count; i ++) {

            if (array[min] > array[i]) {

                min = i;

            }

        }

        if (min != j) {

            int temp = array[j];

            array[j] = array[min];

            array[min] = temp;

        }

       

    }

    for (int i = 0; i < count; i++) {

        printf("%d\n", array[i]);

    }

 

 

//冒泡排序

    int a[] = {3,-9,32,77,63,-24,14,0,21,45};

   

    int n = sizeof(a) / sizeof(a[0]), c = 1, t;

    for (int i = 0; i < n - 1 && c; i++) {

        c = 0;

        for (int j = 0; j < n - 1 - i; j++) {

            if (a[j] > a[j + 1]) {

                c = 1;

                t = a[j];

                a[j] = a[j + 1];

                a[j + 1] = t;

            }

        }

    }

    for (int i = 0; i < n; i++){

        printf("%d\n", a[i]);

    }

 

//    折半查找

    int a[9] = {1, 2, 3, 4, 6, 8, 10, 11, 13};

    int number = 10;

    int len = sizeof(a) / sizeof(a[0]);

    int star = 0, end = len - 1, mid = 0, index = 0;

   

    while (star <= end){

        mid = (star + end ) / 2;

        if(number == a[mid]){

            index = mid;

            break;

        }else if (number > a[mid]) {

            star = mid + 1;

        }else{

            end = mid - 1;

        }

    }

    printf("第%d個數是%d", index + 1, a[index]);

 

 

 

 

內存   :  棧內存  (自動)從高往低分配,從低往高存取

                      堆內存  (動態) 從低往高分配

                      全局靜態區 (靜態區)

                      常量區     (靜態區)

                      代碼區       (靜態區)

靜態區:應用程序一啓動,這些內存就分配好了。常量區和代碼區是不可改變的,全局靜態區是可以改變的。

 

棧內存的空間有8M左右

堆內存的空間相對大很多,只有堆內存可以進行垃圾回收。堆內存的訪問都是通過指針匿名訪問的。

 

堆內存的分配成本比較高,在申請的時候需要查表

 

格式化:畫格 分配地址

 

 

貪婪法

 

 

指針的類型是爲了知道通過指針尋址的類型的空間大小,影響指針加一減一跳轉多少個字節

 

 

a[0] 語法糖

a[0] ----à * ( a + 0)---à * ( 0 + a) ---à 0[a]

 

 

指針和數組最大的區別:1、指針可以賦值  數組名不可以  2、可以通過數組名求數組大小  指針不可以

 

 

 

異或  不同爲1  相同爲0

 

2014/8/7

const 常量                          只能讀  不能寫

 

 

const  int   *p = &a ; 不能通過*p對a進行修改

 

 

 

static int s = 0; 

1、一但被static修飾,s將不在棧內存,將放在全局靜態區,s將不會再隨着函數的結束而釋放。   並且靜態變量的初始化只會被執行一次。函數在編譯的時候會吧這行代碼拿到函數外面。所以多次調用這個函數s也不會被多次初始化。

2、靜態全局變量不會在當前文件以外的文件中訪問到

3、如果沒有手動初始化系統將自動初始化爲0

 

分爲:靜態全局變量,靜態局部變量

 

 

 

crash  衝突 ——指程序崩潰

 

 

 

 

一直申請內存不釋放 就會導致內存泄漏(leak)

指針去訪問一段已經釋放的內存這個指針就叫做野指針——5

 

malloc 動態分配內存

calloc 系統自動清理內存

realloc  重新分配內存

memset 初始化內存

 

 

typedef 爲現有類型創建⼀一個新的名字,或稱爲類型別名!

typedef 原類型 新類型
 例如: typedef int Integer !

SDK  : software development  kit   軟件開發工具包

API  : application  program interface

 

函數指針 : 本身是個指針 ,用來存儲函數的地址。

回調函數 :

類的設計原則: 高內聚,低耦合 。高內聚是爲了保護外部使用的安全。將類封裝起來儘量,讓外面更多正確的使用這個功能。

Reference  指向   ref結尾的基本都是指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章