指針和指針變量的定義:
一個變量的地址稱爲該變量的“指針”
例如,地址1000是變量i的指針。如果有一個變量專門用來存放另一變量的地址(即指針),則它稱爲“指針變量”
定義一個指針變量
定義指針變量的一般形式爲
基類型 *指針變量名;
說明
可以用賦值語句使一個指針變量得到另一個變量的地址,從而使它指向一個該變量
例子
float *pointer_3;
char *pointer_4;
pointer_1=&i;
pointer_2=&j;
注意
- 指針變量前面的“*”,表示該變量的類型爲指針型變量
例 : float pointer_1;
指針變量名是pointer_1 ,而不是 pointer_1 - 在定義指針變量時必須指定基類型。
需要特別注意的是,只有整型變量的地址才能放到指向整型變量的指針變量中。下面的賦值是錯誤的∶
float a;
int * pointer_1;
pointer_1=&a;
指針變量的引用
注意:
指針變量中只能存放地址(指針)
不要將一個整數(或任何其他非地址類型的數據)賦給一個指針變量
例子 —— 通過指針變量訪問整型變量
#include <stdio.h>
void main()
{
int a,b;
int *pointer_1, *pointer_2;
a=100;b=10;
pointer_1=&a; /*把變量a的地址賦給pointer_1 */
pointer_2=&b; /*把變量b的地址賦給pointer_2 */
printf(″%d,%d\n″,a,b);
printf(″%d,%d\n″,*pointer_1, *pointer_2);
}
對“&”和“*”運算符說明:
如果已執行了語句 pointer_1=&a;
- &* pointer_1的含義是什麼?
“&”和“”兩個運算符的優先級別相同,但按自右而左方向結合。因此,& pointer_1與&a相同,即變量a的地址。
如果有pointer_2 =&* pointer_1 ;它的作用是將&a(a的地址)賦給pointer_2 ,如果pointer_2原來指向b,經過重新賦值後它已不再指向b了,而指向了a
- &a的含義是什麼?
先進行&a運算,得a的地址,再進行運算。&a和pointer_1的作用是一樣的,它們都等價於變量a。即*&a與a等價 - (*pointer_1)++相當於a++
例子 —— 輸入a和b兩個整數,按先大後小的順序輸出a和b
#include <stdio.h>
void main()
{ int *p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);
p1=&a;p2=&b;
if(a<b)
{p=p1;p1=p2;p2=p;}
printf("a=%d,b=%d\n\n″,a,b);
printf("max=%d,min=%d\n″,*p1,*p2);
}
指針變量作爲函數參數
例子 —— 對輸入的兩個整數按大小順序輸出
#include <stdio.h>
void main()
{void swap(int *p1,int *p2);
int a,b;
int *pointer_1,*pointer_2;
scanf("%d,%d",&a,&b);
pointer_1=&a; pointer_2=&b;
if(a<b=swap(pointer_1,pointer_2));
printf("\n%d,%d\n",a,b);
}
void swap(int *p1,int *p2)
{ int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}