/* 指针是很复杂的一项技术,所以我写了一些指针的基本用法的理解,写的很详细可能有点罗嗦主要是为了以后的参考,如果有什么个人的看法和补充请和我联系([email protected])。 指针运算符的理解: &p---是指针的物理地址; p---是指针物理地址里的内容(要指向存储单元的地址) *p---是指针物理地址里的内容(就是付给它的存储单元的地址) 指向的内容(就是存储单元的内容) */ void main() { int *p=0; //char最好用NULL,int用0 初始化
int *a=0; //付的是要指向存储单元的地址
int b=38; //指针是一个指向存储单元的地址,它只能存地址 a=&b; //所以要付给它指向的内容,可付任何存储单元 p=a; //把指针a物理地址里的内容付给指针p物理地址里 //的内容,指针p的值就和指针a的值一样,但它们 //的物理地址不同。
//它没有把指针a付给指针p,只是间接的把指针a指向 //的内容b付给指针p了。下面的用法是完全把 //指针a付给了指针m
int **m=0; //付的是要指向的指针的地址,它就是指针的指针
m=&a; //把指针a的物理地址付给指针m物理地址里的内容 //这样指针m物理地址里的内容就是指针a的物理地址 //它可以操作指针a了,m就是指针a(a的物理地址--&a) //*m就是指针a物理地址里的内容(b的物理地址--&b) //**m就是指针a物理地址里的内容指向的内容(b的值--38)
int *&n=a; //引用必须付初值,它不能为空 //int *&n=a;就相当与int *a;n等于a //int **m=&a;就相当与int *a; //m等于&a,*m等于a,**m等于*a
}
/* //例子: 最好不要在堆栈里分配堆,不好控制容易出错。
void GetMemory2(char **p, int num) {
*p =new char[num]; }
void main() { char *str = NULL; GetMemory2(&str, 10); strcpy(str, "hello"); printf(str); delete []str; cout<<endl; } */ /* void GetMemory2(char *&p, int num) {
p = new char[num]; }
void main() { char *str = NULL; GetMemory2(str, 10); strcpy(str, "hello"); printf(str); delete []str; cout<<endl;
} */

|