#include <iostream>
using namespace std;
int main()
{
// q指向的3个连续int的内存的首地址,也即第一个int的地址。
int *q = (int*)malloc(3*sizeof(int));
cout<<q<<endl; //这三个int中第一个int的地址
//q+1指向的是第二个int的内存地址(而不是q所指3个int内存空间之后的第4个int的地址).理解这个后更容易理解二级指针。
cout<<q+1<<endl; //第二个int的地址
cout<<q+2<<endl;
*q = 1;
*(q+1) = 2;
*(q+2) = 3;
int **p = (int**)malloc(3*sizeof(int*)); //在内存中开辟3个(int*)单元,p是指向这3个一级指针的二级指针
cout<<p<<" "<<sizeof(p)<<endl; //上述3个一级指针中第一个指针的值,
cout<<p+1<<" "<<sizeof(p+1)<<endl; // 上述3个一级指针中第二个指针的值,
cout<<p+2<<endl; // 上述3个一级指针中第三个指针的值,
*p = (int*)malloc(4*sizeof(int)); // 开辟4个int空间,首地址赋值给上述第一个指针所指内存的内容,
*(p+1) = (int*)malloc(4*sizeof(int));
*(p+2) = (int*)malloc(4*sizeof(int));
cout<<*p<<endl;
cout<<*(p+1)<<endl;
cout<<*(p+2)<<endl;
//*p 所指向的4个int内存赋初值
**p = 0;
*(*p+1) = 1;
*(*p+2) = 2;
*(*p+3) = 3;
//输出*p所指向的4个int的地址
cout<<&(**p)<<endl;
cout<<&(*(*p+1))<<endl;
cout<<&(*(*p+2))<<endl;
cout<<&(*(*p+3))<<endl;
//*(p+1)所指向的4个int内存赋初值
**(p+1) = 0;
cout<<&(**(p+1))<<endl;
*(*(p+1)+1) = 1;
*(*(p+1)+2) = 2;
*(*(p+1)+3) = 3;
//*(p+2)所指向的4个int内存赋初值
**(p+2) = 0;
*(*(p+2)+1) = 1;
*(*(p+2)+2) = 2;
*(*(p+2)+3) = 3;
system("pause");
return 0;
}
一级指针和二级指针
最新推荐文章于 2022-10-31 17:23:07 发布