1. C++中已經定義了NULL為0:#define NULL 0
指針p可以指向空值NULL即 p = NULL;表示該指針變量不指向任何變量。
注意:指針未初始化與指針為NULL不同,
p = NULL;是有值的,為0;
而在定義時:int *p;這時候碎雖然未對p初始化,但不代表p無值,而是此時的值是一個無法預料的值,p可以指向任何一個 未指定的單元,這是非常危險的,所以在引用指針變量之前必須對其初始化。
任何指針變量都可以與NULL做 = 與 != 比較;
補充知識:
2.兩個指針指向同一個數組可以比大小,指向前面元素的指針變量小于指向后面元素的指針變量。
3.對不同類型的指針賦值要強制轉化:
int *p1;
char *p2;
float *p3
p1 = (int *)p2;
p2 = (char *)p3;
4.引用:為變量起一個別名,不適用于指針和數組。
int a;
int &b = a;/*表示b就是a,占用同一存儲單元,只是名字不一樣而已,即b具有a的地址,在聲明引用時,必須同時初始化,b這個別名被使用后,不可在作為別的變量的名稱。如 int &b = c; */
引用可以作為函數參數,當實參傳遞給形參時,就相當于為變量起了一個別名,在被調函數中,變量的別名的值別改變了,則函數外部對應的原變量也改變了,因為它們使用同一存儲空間,使用同一地址,這彌補了C中函數參數只傳值的不足(傳指針也是傳指針
的值)。
#include<iostream>
using namespace std;
int main(){
void swap( int & , int & );//&是引用,不是取地址
int i = 1, j = 2;
swap( i,j );
cout <<"i=" <<i <<endl <<"j=" <<j <<endl;
return 0;
}
void swap( int &a, int &b ){ /*調用到次函數時,實際上是把i的地址賦給a,j的地址賦給b,這時候a,b分別是i,j的別名,當函數內部的值改變了,自然而然的外部的值也改變了 ==》這就是 地址傳遞方式《==*/
int temp;
temp = a;
a = b;
b = temp;
}
注意和指針區別:指針是要單獨開辟內存空間來聲明指針變量的,而引用不用。
引用可以代替指針完成很多工作。