指针 取地址符 传参

来源:百度知道 编辑:UC知道 时间:2024/05/19 02:04:30
有以下一个程序
int *a;
vol(&a);
调用vol的函数
void vol(int **a){}

请问这程序做了什么,,是怎么传递参数的 高手详细分析下,谢谢
我再说详细一点吧,
void vol(int **b)//为了不混乱,我把a改成b
{
*b=new int[10];
(*b)[0]=100;
}

首先,你定义了一个指针a,这个指针是一个指向整型变量的指针。
vol函数的参数是一个二级指针,是指向指针变量的指针。
vol(&a)的意思是将指针a的地址传递给vol的二级指针a。在vol函数中,a是一个二级指针,它指向的内容是主函数中定义的指针。
你这里容易混淆,假设这样:int *a;
vol(&a);
调用vol的函数
void vol(int **b){}
实质上是b->a->int变量
明白了么?就是将a的地址赋值给b了。b就是二级指针。a是一级指针。

补充:本来讲解完了,我就不想多说了,但是看了楼下这位,啊,现在是楼上那位自由的发言,我十分不解。不知道其所云何物。

首先,定义的指针a是一个指针类型的变量,它存储的就是一个地址啊,这个地址就是你所申请的那100个整形空间的首地址。
其次,你在这100个空间中的第三个赋值为3。
然后将a指针的地址传递给参数b,这个b是一个指向指针的指针变量,它存放的是指针a的地址。因此,b就指向了指针a,也就指向了指针a指向的首地址。
再次,你打印的是b[0][0],在主函数中并未赋值的a[0],当然是没有值的。
这个关系,我想任何C语言的学者都不会否认吧。那就是b指向指针a,指针a指向了你所申请的100个int空间的首地址。就是这样的简单关系啊。不知道楼上 自由 所云?!

问题补充:我再说详细一点吧,
void vol(int **b)//为了不混乱,我把a改成b
{
*b=new int[10];
(*b)[0]=100;
}
补充回答:*b在局部函数vol中申请了10个整型空间,将此空间的首个元素存储为100.实质上a就指向了这个整形空间,并且指向100.但是请注意,参数传递实际上是参数赋值的过程,就是说相当于int **b = &a。所以b申请了空间,a自然也就有了空间,也指向100.你的这个函数说明借由vol函数为a申请了空间并赋值。

结果是对*a的存储地址做处理.具体什么处理要看vol()函数了.