C 根据数组中是否有数字,尝试打印1或2

C 根据数组中是否有数字,尝试打印1或2,c,arrays,algorithm,search,C,Arrays,Algorithm,Search,如果找到一个数字,我尝试打印1,如果找不到,则打印0 我的代码int search(int a[],int n,int key,int**loc)查找数组并返回0或1 然而,当我运行它时,我得到了4195632 我想这个数字和地址有关,但不知道我做错了什么 [5]是数组 n=数组的大小 关键是我要寻找的元素 **loc应该是指向数组中搜索键的第一个位置的指针 #include <stdio.h> int a[5] = {5,3,7,2,9}; int n = 5; int key

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

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

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

我想这个数字和地址有关,但不知道我做错了什么

[5]是数组

n=数组的大小

关键是我要寻找的元素

**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);
}
#包括
int a[5]={5,3,7,2,9};
int n=5;
int键=5;
int**loc=0;
整数搜索(整数a[],整数n,整数键,整数**loc)
{
int x;
对于(x=**loc;x

我也不知道**loc做什么。我知道这与指针有关,但我想我必须使用它,因为这是家庭作业。

先学一点C

您得到的是函数搜索的地址(在64位系统上仅为其一部分),但您不调用此函数


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

您的意思似乎如下

#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;
}
如果需要最后一个参数的类型为
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;
}

你需要一本像样的C语言书。函数的工作方式和你想象的不一样…@HolyBlackCat我用C编写的所有其他程序的工作方式都与java非常相似,所以我写的有点像javalol@i_want_to_die不清楚变量loc的用途是什么?Java和C是不同的语言。如果你试着用Java来学习C语言,有些事情是可行的。但是,最终,您会遇到这样的情况:Java构造不是有效的C(如本例所示),或者更糟的是,它们是有效的构造,但工作方式完全不同。如果你想学习C,你最好学习C,而不是试图用C编写Java代码并找出差异。请不要破坏你的帖子。谢谢,但我需要使用**loc。我将试用你的程序,用**loc替换*loc,但我不认为这就是C语言的工作原理
#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;
}
5 is found at position 0