【黑馬程式員】————指標

來源:互聯網
上載者:User

標籤:style   blog   color   使用   os   io   strong   資料   

 一、指標變數的定義

1. 格式:變數類型 *指標變數名;
2. 舉例:int *p; char *p2;
3. 注意:定義變數時的*僅僅是指標變數的象徵

4.指標變數只能儲存地址

5.指標就一個作用:能夠根據一個地址值,訪問對應的儲存空間
6.指標變數p前面的int:指標變數p只能指向int類型的資料

7.任何指標都佔用8個位元組的儲存空間

 

二、利用指標變數簡單修改其他變數的值

1.指向某個變數

int a;

int *p;
p = &a;
或者
int *p = &a;

2.修改所指向變數的值
*p = 10;                                 //這個時候的*的作用:訪問指向變數p指向的儲存空間

3.在函數內部修改外面變數的值
int a = 10;
change(&a);

void change(int *n)
{
*n = 20;
}

4.清null 指標

  p = 0;

  p = null;

5.指標變數未經過初始化,不要拿來間接訪問其他儲存空間

 

三、指標與數組

將數組當做函數參數傳入時,會自動轉為指標,

  1>利用一個指標來接收一個數組,指標變數p指向了數組的首元素
                  p = &ages[0];

  2>數組名就是數組的地址,也是數組首元素的地址
                  p = ages;

1.數組元素的訪問方式
  int ages[5];
  int *p;
  p = ages;
  1> 數組名[下標] ages[i]
  2> 指標變數名[下標] p[i]
  3> *(p + i)

  /*
  p ---> &ages[0]
  p + 1 ---> &ages[1]
  p + 2 ---> &ages[2]
  p + i ---> &ages[i]
  */


2.指標變數+1,地址值究竟加多少,取決於指標的類型
  int * 4
  char * 1
  double * 8

 

四、指標與字串

1.定義字串的2種方式
  1> 利用數組
    char name[] = "itcast";
    * 特點:字串裡面的字元是可以修改的
    * 使用場合:字串的內容需要經常修改

  2> 利用指標
    char *name = "itcast";
    * 特點:字串其實是一個常量字串,裡面的字元是不能修改
    * 使用場合:字串的內容不需要修改,而且這個字串經常使用

2.定義字串數組
  1> 利用二維字元數組
    char names[2][10] = {"jack", "rose"};

  2> 利用指標數組
    char *names[2] = {"jack", "rose"};

3.指標變數指向字串的首字元

 

五、返回指標的函數

l   指標也是C語言中的一種資料類型,因此一個函數的傳回值肯定可以是指標類型的

l   返回指標的函數的一般形式為:類型名 * 函數名(參數列表)

 

 

 1 #include <stdio.h> 2 char *test(); 3  4 /* 5  只要求能看懂 6  */ 7  8 int main() 9 {10     char *name = test();11     12     printf("name=%s\n", name);13     14     return 0;15 }16 17 char *test()18 {19     return "rose";20 }

 

六、指向函數的指標

1.      為什麼指標可以指向一個函數?

函數作為一段程式,在記憶體中也要佔據部分儲存空間,它也有一個起始地址,即函數的入口地址。函數有自己的地址,那就好辦了,我們的指標變數就是用來儲存地址的。因此,可以利用一個指標指向一個函數。其中,函數名就代表著函數的地址。

2.      指向函數的指標的定義

定義的一般形式:函數的傳回值類型 (*指標變數名)(形參1, 形參2, ...);

3.      使用注意

l   由於這類指標變數儲存的是一個函數的入口地址,所以對它們作加減運算(比如p++)是無意義的

l   指向函數的指標變數主要有兩個用途:

    調用函數

    將函數作為參數在函數間傳遞  

 

 1   void test1() 2   { 3       // (*p)是固定寫法,代表指標變數p將來肯定是指向函數 4       // 左邊的void:指標變數p指向的函數沒有傳回值 5       // 右邊的():指標變數p指向的函數沒有形參 6       void (*p)(); 7        8       // 指標變數p指向了test函數 9       p = test;10      11      p();12      //(*p)(); // 利用指標變數間接調用函數13      14      //test(); // 直接調用函數15  }

 

七、指向指標的指標
 1 #include <stdio.h> 2 int main() 3 { 4     int a = 10; 5      6     int *p = &a; 7      8     int **pp = &p; 9     10     // a = 20;11     12     // *p = 20;13     14     /*15     (*pp) == p16     17     *(*pp) == *p = a18     19     **pp == *p = a20     */21     **pp = 20;22     23     printf("%d\n", a);24     25     //int ***ppp = &pp;26     27     /*28     char a2 = ‘A‘;29     char *p2 = &a2;30     */31     32     return 0;33 }
  

 

聯繫我們

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