1. 程式人生 > >關於指標的筆記【1】【C語言程式設計-譚浩強】

關於指標的筆記【1】【C語言程式設計-譚浩強】

指標是什麼?

一個 變數的地址稱為該變數的"指標"【將地址形象化的稱為“指標”】。(指標是什麼百度百科)

  注意區分儲存單元的地址和內容這兩個概念的區別。

直接訪問:直接按變數名進行訪問,直接通過變數名訪問變數內容

間接訪問:將變數a的地址存放到另一個變數b中,然後通過變數b找到變數a的地址,從而訪問變數a的內容。

指標變數

一個變數a專門用來存放另一個變數b的地址(即指標),則稱變數a為指標變數。

指標變數就是地址變數,用來存放地址,指標變數的值就是地址(即指標)。

注意區分指標與指標變數這兩個概念。(指標是一個地址,指標變數是存放地址值的變數)

指標使用例子:

 1 #include <stdio.h>
 2
int main() 3 { 4 int a=100,b=10; 5 //定義整型變數a,b,並初始化 6 int * pointer_1, * pointer_2; 7 //定義指向整數型資料的指標變數 pointer_1,pointer_2 8 pointer_1=&a; 9 //把變數a的地址賦給指標變數pointer_1 10 pointer_2=&b; 11 //把變數b的地址賦給指標變數pointer_2 12 printf("a=%d,b=%d\n",a,b); 13 //通過變數名直接訪問a和b的值
14 printf("* pointer_1=%d, * pointer_2=%d\n", * pointer_1, * pointer_2); 15 //通過指標變數間接訪問輸出a和b的值 16 17 return 0; 18 }

 定義指標變數的格式:

      型別名 * 指標變數名;(可以在定義時同時對它初始化)

    型別名是在定義指標變數時必須指定的“基型別”,基型別用來指定此指標變數可以指向的變數的型別。

    因此,指標變數是基本資料型別派生出來的型別,它不能離開基本資料型別而獨立存在。

    一個變數的指標的含義包括兩個方面,一是一儲存單元編號表示的地址,一是它指向的儲存單元的資料型別(如 int,char,float等)。

    說明指標變數a時,應該說:a是指向(基本資料型別)的指標變數

引用指標變數

   給指標變數賦值:

      p=&a; //把a的地址賦值給指標變數p

   引用指標變數指向的變數:

      printf("%d", * p);//以整數型式輸出指標變數p所指向的變數的值,即變數a的值

      * p =1;  //表示把整數1賦給p當前所指向的變數,如果p指向變數a,則相當於把1賦給a,即“a=1”。

   引用指標變數的值:

      printf("%o",p);//作用是以八進位制數型式輸出指標變數p的值,如果p指向a,就是輸出a的地址,即&a

  注意:熟悉這兩個運算子

      1.&  取地址運算子

      2.*   指標運算子(“間接訪問”運算子),*p代表指標變數p指向的物件

示例程式碼:
 1 #include <stdio.h>
 2 int main(){
 3     int *p1, *p2, a, b;
 4     printf("please enter two integer numbers:");
 5     scanf("%d,%d",&a,&b);
 6     p1=&a;
 7     p2=&b;
 8     if(a<b){
 9         p1=&b;
10         p2=&a;
11     }
12     printf("a=%d,b=%d\n",a,b);
13     printf("max=%d,min=%d\n", *p1, *p2);
14     return 0;
15 }

 指標變數作為函式引數

 1 #include <stdio.h>
 2 int main(){
 3     void swap(int *pi,int *p2);
 4     int a,b;
 5     int *pointer_1, *pointer_2;
 6     printf("pleadse enter a and b:");
 7     scanf("%d,%d",&a,&b);
 8     pointer_1=&a;
 9     pointer_2=&b;
10     if(a<b){
11         swap(pointer_1,pointer_2);
12     }
13     printf("max=%d,min=%d\n",a,b);
14     return 0;
15 }
16 void swap(int *p1,int *p2){
17     int temp;
18     temp= *p1;
19      *p1= *p2;
20      *p2= temp;
21 }

 可以在函式內通過操作指標,改變函式外資料。