编写一个函数,在一个整型数组中查找某个指定的元素,若找到,则函数返回真,并把该数组元素的地址从一个参数中返回给调用者;否则,函数返回假。bool find(int key,int x[],int num,int *p)
{ int i=0;
while (i < num)
{ if (x[i] == key)
{ p = &x[i];
return true;
}
i++;
}
return false;
}
void main()
{ int a[20],*q;
......
q = a;
if (find(12,a,20,q) == true)
cout << q << endl;
else
cout << "not found" << endl;
}上述函数find是否正确?
正确的find的写法是:bool find(int key,int x[],int num,int **p)
{ int i=0;
while (i < num)
{ if (x[i] == key)
{ *p = &x[i];
return true;
}
i++;
}
return false;
}
void main()
{ int a[20],*q;
......
if (find(12,a,20,&q) == true)
cout << q << endl;
else
cout << "not found" << endl;
}
为什么后者正确而前者不对,100分送上,谢谢!!
{ int i=0;
while (i < num)
{ if (x[i] == key)
{ p = &x[i];
return true;
}
i++;
}
return false;
}
void main()
{ int a[20],*q;
......
q = a;
if (find(12,a,20,q) == true)
cout << q << endl;
else
cout << "not found" << endl;
}上述函数find是否正确?
正确的find的写法是:bool find(int key,int x[],int num,int **p)
{ int i=0;
while (i < num)
{ if (x[i] == key)
{ *p = &x[i];
return true;
}
i++;
}
return false;
}
void main()
{ int a[20],*q;
......
if (find(12,a,20,&q) == true)
cout << q << endl;
else
cout << "not found" << endl;
}
为什么后者正确而前者不对,100分送上,谢谢!!
bool find(int key,int x[],int num,int*& p)
{
...
p = &x[i];
...
}2, 用指针bool find(int key,int x[],int num,int** p)
{
...
*p = &x[i];
...
}
参数的传递是按值进行的,前一个例子调用函数之后并不能改变q的值,后一个例子传递了q的地址,所以可以改变q本身的值。
{
l = 1000;
}所以你只能把地址传给函数,如下:
void f2(long * pl)
{
*pl = 1000;
}
通过*,把pl这个地址保存的值改为1000而你要改变的是指针,自然要再加一次取地址
void f3 (long **p)
{
long newl = 1000;
long * pn = &newl;
*p = pn;
}简单的理解方法,你可以认为(*p) 就是一个long
说得我也晕了,但是感觉清楚了,不知道你看的懂不?
除非你传递的是地址,你可以改变该地址指向的值,而非该地址的值
现在你想返回地址,所以要传递地址的地址,也就是**p了。
*p的值不会变,**p可以改写
而在调用结束后,P还是恢复原来的a的地址,因为这个时候的 P 仍是一个作为存储地址的变量,
在函数调用中仍被当作是传值调用, 在第二次调用中便被当成是传址调用了.