以下仅为个人理解,如有错误,清指出啊。
指针赋值应该付给地址。
如:
int a=19;
int *p=&a;//指针p的地址就是&p, p指向的地址就是p
1.int *p=&a. int**p = &p. int***的赋值, 必须是&(int**)
后面跟指针时,是将指针所表示的值作为地址赋值的。
int ival = 1024;
int *pi = &ival; // pi points to anint 指针p的地址就是&p, p指向的地址就是p
int **ppi = π // ppi points to apointer to int
int *p = *ppi;//将*ppi的值作为地址存储到p。
cout<<"*ppi="<<*ppi<<endl;
cout<<"*p="<<*p<<endl;
system("PAUSE");
2.P代表p指向的地址,*p代表p指向的地址里存储的值。依次类推,*(p),p存储一个地址address,而*p则是address地址所存储的值。
3.赋值:
Int**pi = &p;//输出&p和**pi,并不一样。赋值时是赋予的地址,输出时则是该地址存储的值。
reftoref::reftoref()
{
int ival = 1024;
int *pi = &ival; // pi points to anint 指针p的地址就是&p, p指向的地址就是p
int **ppi = π // ppi points to apointer to int
int ***pppi =&ppi;
int ****p = &pppi;
cout<<"*ppi="<<*ppi<<endl;
cout<<"pi="<<pi<<endl;
cout<<"&ival="<<&ival<<endl;
cout<<"&pi="<<&pi<<endl;
cout<<"ppi="<<ppi<<endl;
cout<<"***pppi="<<***pppi<<endl;
cout<<"**pppi="<<**pppi<<endl;
cout<<"*pppi="<<*pppi<<endl;
cout<<"****p="<<****p<<endl;//1024,(***p存储1024的地址a,*(***p)就代表a地址里存储的值)
cout<<"***p="<<***p<<endl;//1024所在的地址
cout<<"**p="<<**p<<endl;//指向1024的指针的地址
cout<<"*p="<<*p<<endl; //指向1024的指针的指针的地址
system("PAUSE");
}
输出:
*ppi=0030FB80
pi=0030FB80
&ival=0030FB80
&pi=0030FB88
ppi=0030FB88
***pppi=1024
**pppi=0030FB80
*pppi=0030FB88
****p=1024
***p=0030FB80
**p=0030FB88
*p=0030FB8C
请按任意键继续. . .