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;
}
注意和指针区别:指针是要单独开辟内存空间来声明指针变量的,而引用不用。
引用可以代替指针完成很多工作。