Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C > Re: Problems wi...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 2 of 4 Topic 26132 of 26955
Post > Topic >>

Re: Problems with a simple linear search

by "Jim Langston" <tazmaster@[EMAIL PROTECTED] > May 9, 2008 at 08:40 AM

nembo kid wrote:
> I have an issue with a simple function that has to make a linear
> search for a key into an array.
>
> If the key is found in the array, the function it has to return 1 to
> the caller and pass array index through a out parameter.
>
> The issue is that the out parameter is not being updated.
>
> If I return the position to the caller (instead to use a out
> parameter) all is ok.
>
> But I would to use a boolean (1 or 0) value as return value to the
> caller: 1 stays for found, 0 stays for not found.
>
> Thanks in advance and apologies for my bad english.
>
> Here it is my piece of code.
>
> /*** Code starts here ***/
>
> /* Search for number 'x' in array v[] */
> /* If 'x' found pass array position through 'pos' parameter */
> /* and returns 1 to caller; else returns 0 */
>
> int linsearch (int v[], int nmax, int x, int pos)

pos is being passed by value.  A copy of it is made and passed into the 
function.  pos becomes a local variable here, only visible during the 
lifetime of the function.  Any changes to this local pos will never be
seen 
by the caller.

> {
>
>    int i;
>
>    for (i=0; i<nmax; i++)
>    {
>       if(v[i]==x)
>       {
>          pos=i;    /* pass the index where found */

This only changes the local copy of pos, the local variable.  The local 
variable pos disappears when this function is returned (the next line).

>          return 1; /* returns 1 (found) */
>       }
>    }
>
>    return 0; /* Exit from for...so returns 0 */
> }
>
> int main (void)
> {
>     int myvet[] = {5,4,3,2,1};
>
>     int key = 2; /* Number to find */
>
>     int index=0; /* Actual parameter that holds index of element */
>
>     if(linsearch(myvet, 5, 2, index))

index is passed by value.  The contents of index (0) is copied and passed
to 
the function.

> printf ("\nNumber %d found at position %d ", key, index);
>     else
>         printf ("\nNumber %d not found", key);
>
>    return 0;
> }
>
> /*** Code ends here ***/

Okay, so the question is, how to fix this?  You need to pass a pointer to 
the function you wish to change.  Change the signature of linsearch to:
int linsearch (int v[], int nmax, int x, int* pos)
now pos is a pointer to an integer.  Since you want to change what the 
pointer points to, not the pointer itself, you need a level of
indirection.
      *pos=i;    /* pass the index where found */

* used in this method is to dereference the pointer.  Basically saying, 
"what pos points to".

One other change is needed when you call linsearch.  Instead of passing
the 
variable, you need to pass a pointer to the variable:
    if(linsearch(myvet, 5, 2, &index))

& used this way is "adress off" basically saying, "pass the address of 
index".

-- 
Jim Langston
tazmaster@[EMAIL PROTECTED]

 




 4 Posts in Topic:
Problems with a simple linear search
nembo kid <nembo@[EMAI  2008-05-09 17:31:14 
Re: Problems with a simple linear search
"Jim Langston"   2008-05-09 08:40:21 
Re: Problems with a simple linear search
nembo kid <nembo@[EMAI  2008-05-09 18:01:57 
Re: Problems with a simple linear search
Eric Sosman <esosman@[  2008-05-09 11:41:28 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Thu Jul 24 2:44:24 CDT 2008.