關於指標的筆記【1】【C語言程式設計-譚浩強】
指標是什麼?
一個 變數的地址稱為該變數的"指標 "【將地址形象化的稱為“指標”】。(ofollow,noindex">指標是什麼百度百科 )
注意區分儲存單元的地址和內容這兩個概念的區別。
直接訪問:直接按變數名進行訪問,直接通過變數名訪問變數內容
間接訪問:將變數a的地址存放到另一個變數b中,然後通過變數b找到變數a的地址,從而訪問變數a的內容。
指標變數
一個變數a專門用來存放另一個變數b的地址(即指標),則稱變數a為指標變數。
指標變數就是地址變數,用來存放地址,指標變數的值就是地址(即指標)。
注意區分指標與指標變數這兩個概念。(指標是一個地址,指標變數是存放地址值的變數)
指標使用例子:
1 #include <stdio.h> 2 int main() 3 { 4int a=100,b=10; 5//定義整型變數a,b,並初始化 6int * pointer_1, * pointer_2; 7//定義指向整數型資料的指標變數 pointer_1,pointer_2 8pointer_1=&a; 9//把變數a的地址賦給指標變數pointer_1 10pointer_2=&b; 11//把變數b的地址賦給指標變數pointer_2 12printf("a=%d,b=%d\n",a,b); 13//通過變數名直接訪問a和b的值 14printf("* pointer_1=%d, * pointer_2=%d\n", * pointer_1, * pointer_2); 15//通過指標變數間接訪問輸出a和b的值 16 17return 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(){ 3int *p1, *p2, a, b; 4printf("please enter two integer numbers:"); 5scanf("%d,%d",&a,&b); 6p1=&a; 7p2=&b; 8if(a<b){ 9p1=&b; 10p2=&a; 11} 12printf("a=%d,b=%d\n",a,b); 13printf("max=%d,min=%d\n", *p1, *p2); 14return 0; 15 }
指標變數作為函式引數
1 #include <stdio.h> 2 int main(){ 3void swap(int *pi,int *p2); 4int a,b; 5int *pointer_1, *pointer_2; 6printf("pleadse enter a and b:"); 7scanf("%d,%d",&a,&b); 8pointer_1=&a; 9pointer_2=&b; 10if(a<b){ 11swap(pointer_1,pointer_2); 12} 13printf("max=%d,min=%d\n",a,b); 14return 0; 15 } 16 void swap(int *p1,int *p2){ 17int temp; 18temp= *p1; 19*p1= *p2; 20*p2= temp; 21 }
可以在函式內通過操作指標,改變函式外資料。