/*
指针是很复杂的一项技术,所以我写了一些指针的基本用法的理解,写的很详细可能有点罗嗦主要是为了以后的参考,如果有什么个人的看法和补充请和我联系([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;
}
*/
本文地址:http://com.8s8s.com/it/it2001.htm