指针的用法自解

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

/*

指针是很复杂的一项技术,所以我写了一些指针的基本用法的理解,写的很详细可能有点罗嗦主要是为了以后的参考,如果有什么个人的看法和补充请和我联系(dskra@163.net)。

指针运算符的理解:

&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;

}

*/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航