尝试打印1或2,具体取决于数字是否在数组中

时间:2017-06-10 23:20:20

标签: c arrays algorithm search

如果找到一个数字,我打算打印1,如果找不到,则打印0。

我的代码int search(int a [],int n,int key,int ** loc)查看数组并返回0或1。

然而,当我运行它时,我得到了4195632.

我认为这个号码与地址有关,但不知道我做错了什么

a [5]是数组

n =是数组的大小

key是我要找的元素

** loc应该是指向数组

中搜索关键字第一个位置的指针
#include <stdio.h>

int a[5] = {5,3,7,2,9};
int n = 5;
int key = 5;
int **loc = 0;

int search(int a[], int n, int key, int **loc)
{
    int x;
    for(x = **loc; x < n; x++)
    {
        if(a[x] == key)
        {
            return 1;
        }
        else
            return 0;
    }

    return 0;
}

int main()
{
    printf("%d\n",search);
}

另外我不确定** loc的用途。我知道它与指针有关,但我想我必须使用它,因为这是功课。

2 个答案:

答案 0 :(得分:0)

首先学习一点C。

你得到的是函数搜索的地址(在64位系统上只是其中的一部分),但是你没有调用这个函数。

** loc是搜索数组时的起始索引位置。

答案 1 :(得分:0)

看来你的意思如下。

$(document).ready(function() {
  $('#showPanel').click(function() {
      $('#buttonDrawer').animate({
      width: 150
      });
  });
});

程序输出

#include <stdio.h>

int search( const int a[], size_t n, int key, size_t *loc )
{
    *loc = 0;

    while ( *loc < n && a[*loc] != key ) ++*loc;

    return *loc != n;
}

int main(void) 
{
    int a[] = { 5, 3, 7, 2, 9 };
    const size_t N = sizeof( a ) / sizeof( *a );

    int key = 5;
    size_t loc;

    if ( search( a, N, key, &loc ) )
    {
        printf( "%d is found at position %zu\n ", key, loc );
    }

    return 0;
}

如果最后一个参数必须具有类型5 is found at position 0 ,那么该函数可以采用以下方式

int **

很奇怪,但输出与上面的程序相同

#include <stdio.h>

int search( const int a[], size_t n, int key, int **loc )
{
    *loc = ( int * )a;

    while ( *loc != a + n && **loc != key ) ++*loc;

    return *loc != a + n;
}

int main(void) 
{
    int a[] = { 5, 3, 7, 2, 9 };
    const size_t N = sizeof( a ) / sizeof( *a );

    int key = 5;
    int *loc;

    if ( search( a, N, key, &loc ) )
    {
        printf( "%d is found at position %zu\n ", key, ( size_t)(loc - a) );
    }

    return 0;
}