C語言第12輪:指標

來源:互聯網
上載者:User

標籤:

C語言第12輪:指標

 

【學習目標】

1.        指標

2.        指標與數組

 

A: 指標的概念

  記憶體儲存單元按位元組排序。每一個位元組編有序號。我們稱之為地址。因為能夠通過地址就能夠找到所要的記憶體單元,所以我們把地址成為指標。指標是個特殊的變數,它裡面儲存的數值被解釋為記憶體裡的一個地址

作用:

(1)       指標能夠有效地表示複雜資料結構,如隊列、棧、鏈表等

(2)       指標能夠像彙編一樣處理記憶體位址,為動態記憶體分配提供支援

(3)       指標能夠實現對數組和字串的方便使用,提高程式的效率

 

B: 指標變數的定義

 

   資料類型  * 指標變數;

   如:

    

   int*p2;        /*p2是指向int型的指標變數*/       float*p3;      /*p3是指向float型的指標變數*/      char*p4;       /*p4是指向char型的指標變數*/

說明:資料類型並非指變數本身的類型,而是該變數所指向目標變數的類型。指標變數僅僅能指向同類型的變數。

 

//指標的定義#include <stdio.h> int main( void ){                   //野指標:不是NULL指標,是向被釋放的或者訪垃圾記憶體的指標         int   *ptr1; //ptr1為int型指標,野指標,裡面為垃圾地址         char  *ptr2; //ptr2為char型指標,野指標,裡面為垃圾地址          //在VC中編譯,會提示ptr1和ptr2沒有初始化                   float*ptr3= NULL;  //ptr3為float型指標,不是野指標,已經初始化為NULL                 //查看地址         printf("( ptr1 )= %p\n", ptr1 );         printf("( ptr2 )= %p\n", ptr2 );         printf("( ptr3 )= %p\n", ptr3 );           return 0; }

 

C: 指標的賦值(注意:類型要匹配)

(a)使用地址運算子&:

如:

int a =133;int * p1;p1= & a;    //使用地址運算子把a的值賦值給指標p1


(b)將一個已具有指向的指標變數賦值給還有一個指標變數

如(接上面的): 

int*  p2;

             p2=p1;      //p1和p2同一時候指向變數a

(c)  指標與數組的賦值

   int a[5],*pa;   pa=a;    //(數組名表示數組的首地址,故可賦予指向數組的指標變數pa)  //也可寫為:   pa=&a[0];   //數組第一個元素的地址也是整個數組的首地址,               //當然也可採取初始化賦值的方法:  int a[5];  int *pa=a;


(d) 字串與指標的賦值。

比如:

    char *pc;    pc="C Language";       //或用初始化賦值:    char *pc="C Language";


PS: 不同意把一個數直接賦予指標變數。

如:

   int *p;   p=1000;    //類型不符。提示錯誤   //改進方式   P= ( int * )100; //強制類型轉換。

D:  & 和 * 的使用

(a) 合法的使用取地址符能夠得到一個變數的地址

如:

  int a;  int score[5]= {80, 90, 97, 98, 63};  &a,&score[0];    //該操作合法  &(a+5);         // 該操作非法,越界  &a=123;       //該操作非法,須要的話必須的強制轉換  &score;        //該操作非法,score本身代表score的首地址

(b)使用* 運算子,間接存取指標所指向的目標標變數的值(類型要匹配)

itn  a = 234;int * p1;p1=& a;    //p1指向數組aprintf(“%d\n”, *p );  //符號*是把地址中的內容取出。

E: 指標與整數相加減

    意義:表示指標的移動

如: p+n   p-n  p++   p--  ++p  --p

PS:

(1)   當中的n為整數。地址的移動不能為小數。

(2)   加法表示指標p向地址增大的方向移動。

(3)   減法表示指標p向地址減小的方向移動

(4)   至於移動的長度,是由電腦決定。

如:設p是指向type(類型)類型的指標。n為整型運算式,則p+(或—)n為一個新的地址。其值為p+(或-)n*sizeof(type)。

 

F: 指標與數組

   因為數組中的各元素的儲存單元是連續分配的。因此能夠用指標來訪問數組,數組名就是該數位首個地址。

如: int a[]=“abcdefg”;

     a 就是該數組的首地址。等價於&a[0]

PS: 通過收地址,能夠非常快的、方便的訪問數組中的其它元素。方法例如以下:

        首地址+ 位移量

      a[ i ]能夠轉化為:  *(a+i),  *(&a[0]+i)

 

 

指標與數組的比較

指標

數組

儲存資料的地址,不論什麼存入指標變數的資料都會被當做地址來處理。

儲存資料。數組名為數組首元素的首地址。

間接訪問資料。通過擷取指標變數中的內容(地址),然後從這個地址提取資料。

指標能夠使用指標形式訪問資料,也能夠使用下標形式訪問資料。

直接訪問資料。能夠通過指標的形式訪問資料,也能夠使用下標訪問資料。

通經常使用於動態資料結構

通經常使用於儲存固定數目

使用malloc,calloc,recalloc和free函數分配記憶體

不能刪除分配的記憶體,能夠刪除資料

 

 

【指尖的微笑】錯誤在所難免。希望得到大家的指正^-^

轉載時保留原文的連結(http://it.bangedushuren.cn/)原創,轉載請註明

著作權聲明:本文皆有[www.bangedushuren.cn]原版的,轉載請註明http://dh.51zhui.cn/,謝謝

C語言第12輪:指標

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.