程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記(三)

C語言學習筆記(三)

編輯:關於C語言

1.函數形參求值順序:

  int i = 2;

  max(i, i++);

  a.若順序從左到右則為max(2, 2);

  b.若順序從右到左則為max(3, 2);

  要寫與求值順序無關的函數。

2.函數值傳遞特點:

  a.形參與實參占有不同的內存單元;

  b.單向傳遞。

3.extern可以擴展函數的作用域,不管是在同一文件中還是在不同文件中。

4.const的用法:

  a.修飾函數參數,表明此參數不可更改

  b.修飾普通變量,表明此變量不可更改

  c.修飾指針變量,(分兩種)

  example:

    (1)const int *p = &a; 等同於  int const *p = &a;

      代表指針p所指向的值不能被修改。

    (2)int* const p = &a;

      代表指針p不能被修改。

    區分方法:看"const"在"*"前面還是後面。

5.static的用法:

  a.限定變量的作用域

  b.設置變量的存儲域

6.用聯合體判斷CPU是大端還是小端:

  int is_endian()

  {

    union A{

      int a;

      char b;

    }B;

    B.a = 0x01;

    printf("%d\n",B.b);

  }

 

7.數組和指針:

  a.分析char *a;

    (1)char * : 去掉了a, 變量的類型(指針)。

    (2)char :    去掉了*a, 指針所指向的類型。

  b.int *p1[10] (指針數組)

   int (*p2)[10] (數組指針,指向一個數組,每個數組元素都是int類型)。

  c.char a[5];

    (1)char (*p1)[5] = &a;(正確)

    (2)char (*p2)[5] = a;  (錯誤)

    (3)char *p = a;           (正確)

    這裡a代表數組首元素的地址,即&a[0]。分清數組首元素地址和數組地址的分別。

  d.如果出現指針不兼容警告,那麼指針的類型應該跟隨左操作數。

8.變量的作用域:

  a.C編譯器進行了優化:變量在沒有使用之前是不分配內存的。比如兩個文件中同時定義了全局變量int a;因為它們沒有分配內存,所以在使用時不會出錯。如果同時定義了int a = 1; int a = 2;那就錯了。最好在全局變量前加上static。

  b.塊變量:某個語句塊運行時存在。

  c.靜態局部變量具有全局生存期,但他的作用域還是函數作用域。

  d.所有靜態存儲區或全局存儲區的變量若無顯式賦值,則系統自動賦值為零。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved