#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef enum { FALSE, TRUE } BOOL;
BOOL Int_Sum(void*, void*, void*);
BOOL Sum(BOOL(*f)(void*, void*, void*), void* p_num, void* number) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 1; j < N; j++) {
if (f(p_num+i, p_num+j, number))
return TRUE;
}
}
return FALSE;
}
int main()
{
int num[] = { 3,5,23,5,6 }, i, value;
if (Sum(Int_Sum, num, 5) == TRUE)
printf("There is such sum\n");
else
printf("There is no such sum\n");
getch();
return 0;
}
BOOL Int_Sum(void* a, void* b, void* c)
{
if (*(int*)a + *(int*)b == *(int*)c)
return TRUE;
return FALSE;
}
it only works when i use void**, anyone can explain it to me? i thought it doesn't matter since im passing the address of the first element in the array?
Edit: the original code was like this and it works, the one above i change so i can test things out, but the one below i still don't quite it
typedef enum { FALSE, TRUE } BOOL;
BOOL Int_Sum(void*, void*, void*);
BOOL Sum(BOOL(*f)(void*, void*, void*), void** p_num, void* number) {
int i,j;
for (i = 0; i < N; i++) {
for (j = 1; j < N; j++) {
if(f(p_num[i], p_num[j], number))//f is int_sum
return TRUE;
}
}
return FALSE;
}
int main()
{
int num[] = { 3,5,23,5,6 }, i, value;
void* p_num[N];
for (i = 0; i < N; i++)
p_num[i] = &num[i];
printf("\nPlease enter an integer number ");
scanf("%d", &value);
if (Sum(Int_Sum, num, &value) == TRUE)
printf("There is such sum\n");
else
printf("There is no such sum\n");