20145320《信息安全系統設計基礎》第十二週學習總結

20145320《信息安全系統設計基礎》第十二週學習總結

學習內容總結回顧


第九周學習內容總結
html

第十週學習內容總結數組

第十一週學習內容總結安全

指針與聲明

  • C語言中變量的聲明包括兩個部分:
    - 類型
    - 聲明符
    • 對於簡單類型,聲明並不會對代碼產生多大的閱讀障礙,而對於複雜類型的識別,能夠採用右左右左法進行判斷。

指針數組與數組指針

  • 指針數組:即用於存儲指針的數組,也就是數組元素都是指針
    • 舉例說明:
      • int *a[10]
      • 表示:數組a中的元素都爲int型指針
      • 元素表示:a[i] (a[i])也是同樣的,由於[]優先級高於*
  • 數組指針:即指向數組的指針,指針指向一個類型和元素個數都固定的數組
    • 舉例說明:
      • int (*a)[10]
      • 表示:指向數組a的指針
      • 元素表示:(*a)[i]
  • 指針函數:即返回值是指針類型的函數
    • 舉例說明:
      • int *comp()
  • 函數指針:即指向函數的指針,函數名就是函數指針
    • 舉例說明:
      • int (*comp1)()

右左右左法

  • 具體方法:
  • 從變量名開始,先右再左地,交替地一個一個向外看,在紙上寫下:「變量是」
  • 若向右遇到左圓括號,在紙上寫下:「函數,參數是」,並用一樣的方法處理括號中每個參數——在紙上寫下:「返回」
  • 若向右遇到方括號,在紙上寫下:「數組,長度爲{方括號的內容},元素類型爲」
  • 若向右遇到右圓括號,什麼也不作
  • 若向左遇到*,在紙上寫下:「指針,指向」
  • 若向左遇到任何類型,在紙上寫下對應的類型名
  • 舉例說明:分析void ((*fp1)(int))[10]
  • 從fp1開始——fp1是
  • 向右,遇到右括號,什麼也不作
  • 向左,遇到*——指針,指向
  • 向右,遇到左圓括號——函數,參數是int,返回
  • 向左,遇到*——指針,指向
  • 向右,遇到左方括號——數組,長度爲10,元素類型爲
  • 向左,遇到*——指針,指向
  • 向右,已經到聲明結尾,什麼也不作
  • 向左,遇到void——void
  • 結果是:fp1是 指針,指向 函數,參數是int,返回指針,指向數組,長度爲10,元素類型爲 指針,指向 void

關於指針數組與數組指針的區別?

  • 數組指針(也稱行指針)
    • 定義 int (*p)[n];()優先級高,首先說明p是一個指針,指向一個整型的一維數組,這個一維數組的長度是n,也能夠說是p的步長。也就是說執行p+1時,p要跨過n個整型數據的長度。函數

    • 如要將二維數組賦給一指針,應這樣賦值:學習

      int a[3][4];
        int (*p)[4]; //該語句是定義一個數組指針,指向含4個元素的一維數組。
        p=a;//將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]
        p++; //該語句執行事後,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
        數組指針也稱指向一維數組的指針,亦稱行指針。
  • 指針數組設計

    • 定義 int p[n];[]優先級高,先與p結合成爲一個數組,再由int說明這是一個整型指針數組,它有n個指針類型的數組元素。這裏執行p+1時,則p指向下一個數組元素,這樣賦值是錯誤的:p=a;由於p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],並且它們分別是指針變量能夠用來存放變量地址。但能夠這樣 p=a; 這裏p表示指針數組第一個元素的值,a的首地址的值。指針

    • 如要將二維數組賦給一指針數組:code

      int p[3];
        int a[3][4];
        p++; //該語句表示p數組指向下一個數組元素。注:此數組每個元素都是一個指針
        for(i=0;i<3;i++)
        p[i]=a[i];
        這裏int p[3] 表示一個一維數組內存放着三個指針變量,分別是p[0]、p[1]、p[2] 因此要分別賦值。

關於函數指針和指針函數的區別

  • 指針函數是指帶指針的函數,即本質是一個函數。函數返回類型是某一類型的指針
    • 類型標識符 函數名(參數表) ;具體格式:int f(x,y);htm

      首先它是一個函數,只不過這個函數的返回值是一個地址值。指針函數必定有函數返回值,並且在主調函數中,函數返回值必須賦給同類型的指針變量。例如:blog

      01.float fun();
         02.float p;
         03.p = fun(a);
  • 函數指針是指向函數的指針變量,即本質是一個指針變量。 
    * 指向函數的指針包含了函數的地址,能夠經過它來調用函數。聲明格式以下: 類型說明符 (*函數名)(參數)

    使用的時候:
    
          01.int (f)(int x); /聲明一個函數指針 /
          02.f=func; /將func函數的首地址賦給指針f */
相關文章
相關標籤/搜索