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