指針變量的引用
⑴直接訪問:直接按變量名訪問的方式;
間接訪訪問:通過另一變量找到原變量的地址從而訪問原變量的方式。
⑵*爲指針運算符或“間接訪問”運算符,*p表示指針變量p指向的對象。
⑶在指針變量的引用過程中,容易出現很多錯誤,以交換兩變量的值爲例,如下:
void swap1(int a,int b)
{
int temp; //定義一個整形變量,未傳指針,不能改變實參的值。錯誤
temp = a;
a = b;
b = temp;
}
void swap2(int *p,int *q)
{
int *temp = p; //p的地址賦給指針變量temp
p = q; //交換了兩個指針變量,相當於只換了門牌號。錯誤
q = temp;
}
void swap3(int *p,int *q)
{
int *temp; //*temp未初始化,爲野指針(懸掛指針),地址存在,訪問不了。錯誤
*temp = *p;
*p = *q;
*q = *temp;
}
以上寫法都是容易出現的錯誤寫法,正確寫法如下:
void swap(int *p,int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
int main()
{
int a = 10; //a,b爲實際參數
int b = 20;
swap(&a,&b); //被調用的函數
printf("a = %d,b = %d\n",a,b);
return 0;
}
我們發現,在父函數調用子函數時,子函數要想影響父函數,必須有①傳指針、②解引用。 二者缺一不可。
⑷NULL:空指針,標識當前指針爲無效指針
c語言和c++中,null並不統一。在c語言中null表示指向0的空指針,而c++中,null就直接相當於0了。