C語言核心之數組和指標詳解一

來源:互聯網
上載者:User

 指標:

相信大家對下面的代碼不陌生:

int
i=2;                                            

       int *p;                                             

       p=&i;

這是最簡單的指標應用,也是最基本的用法。再來熟悉一下什麼是指標:首先指標是一個變數,它儲存的並不是平常的資料,而是變數的地址。如上代碼,指標p中儲存的是整型變數i的地址資訊。

接下來看如何定義一個指標,既然指標也是一個變數,那麼它的定義也和其它變數一樣定義:如:int  *p;*是間接定址或間接引用運算子。上例中我們還看到了一個特別的運算子&,它是一個取地址運算子(在其他合適場合&也是按位元運算運算子,&&為取交集運算子)。

在上面的指標定義中,我們看到了定義的是一個整型指標,難道指標還有類型嗎?答案是肯定的,指標只能指向某種特定類型的對象,也就是說,每個指標都必須指向某種特定的資料類型(唯一的例外:指向void類型的指標可以存放指向任何類型的指標,但它不能間接引用其自身。)。比如,int 類型的指標絕對不能指向char 類型的變數。

下面我們給出一個完整的例子來說明指標的簡單應用:

#include<stdio.h>

void main()

{

       int
a,b,c,*p;

       a=1;

       b=3;

       p=&a;

       b=*p+1;

       c=*(p+1);

       printf("%d
%d %d %d /n",a,b,c,*p+3);

 

}

運行結果為:  1 2 -858993460 4

這是個完整的例子,可以自己在機器上調試一下,現在很多人用的都是微軟的Visual Studio 開發環境,有人就不知道在該開發環境中怎麼寫C程式以及調試C程式,具體境況可以參考附錄。

在上面例子中,看到了這樣兩個運算式b=*p+1;和c=*(p+1);前者的意思是p所指的地址裡的內容加1再賦給b,相當於b=a+1;,後者是p所指的地址加1再把(p+1)所指的地址賦給c,當然我們不知道p的下一個地址裡放的是什麼,所以輸出了一個隨機值(這樣的操作時很危險的,切記不要使用不確定的記憶體位址)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.