C語言指標

來源:互聯網
上載者:User

標籤:c 指標

第一、 指標和常數

常數是不能直接幅值給指標的,如果想給指標幅常數,需要如下操作:

int cal=8;

int *pcal=&cal;

pcal指向8儲存的地址,*pcal為該地址儲存的資料8。

第二、 指標和數組

指標和數組有著天然的聯絡,其實數組就是一個連續地址存放著常數,我們看下面一個例子:

int arry[3]={1,3,5};

那麼arry就是該數組的首地址,*arry就是該數組首地址存放的資料1,*(arry+1)則為該數組的第二個位置存放的資料3

從以上可以看出:

*arry和arry[1]同樣指向該數組的首個元素。

進一步延伸,如下:

a 、int *data[3] 為指標數組,數組中每個元素為一個指向int型資料的指標,賦值如下:

  int arry[3]={1,3,5};

  int *data[3]={arry,arry+1,arry+2};

  data[0]為指向arry首地址,*data[0]為該地址存放的資料1。data為data數組的首地址,*data和data[0]都為數組arry的首地址。其實也可以說定義了三個數組 data[0], data[1]和data[2]。

b、int(*data)[3]為一數組指標,為一數組,每個元素為存放一個地址,賦值如下:

  int arry[3]={1,3,5};

  int (*data)[3]=&arry;

  那麼*data就為第一個元素的地址,**data就為第一個地址所在的元素1。

  第三、 指標與結構體

    struct PERSON

  {

  char *pername;

  int age;

  }person;

  如果想給*pername幅值,那麼可以如下操作:

  person.pername="jack";//用指標,可以完成賦值

  如果結構體定義為

  struct PERSON

  {

  char pername[20];

  int age;

  }person;

  person.pername[20]="jack"是不能通過的,其原因就是結構體為抽象資料類型,不分配儲存單元,所以數組賦值不通過。如果採用指標賦值,那麼可以解決這類問題。

  第四、 指標與函數

  指向函數的指標在linux作業系統中很常見

  int print(int a, int b ,char *p)

  { printf("in put number sum is %d,input string is %s\n",a+b,p);//三個參數,int int和char*

  return a+b;}

  int main()

  {

  int (* pprint)(int,int,char *);//定義指向函數print的指標函數*pprint,三個參數,int int和char*

  pprint=print;//給指標函數賦值

  int c;

  c=pprint(3,6,var);

  printf("%d\n",c);//輸出print的return值

  }

一個函數其實就是從一個地址開始的特殊功能程式,其函數名就為該程式的首地址,所以可以這麼給指標函數賦值:pprint=print;//給指標函數賦值


本文出自 “大李子” 部落格,謝絕轉載!

C語言指標

聯繫我們

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