【发布时间】:2022-10-08 01:52:07
【问题描述】:
我正在编写一个程序,该程序旨在读取两个数组并找到两者之间的差异(在集合 A 中找到但不在集合 B 中的元素)。
这些集合使用 1 和 0 的数组存储(1 表示存在的元素,0 表示不存在的元素)。我编写了以下代码,但似乎无法理解为什么会收到这些警告
warning: comparison between pointer and integer [enabled by default]
if(p==1 && q==0)
^
warning: assignment makes pointer from integer without a cast [enabled by default]
set_difference = 1;
我编写了以下代码。它也不会返回值。
#define N 10
void find_set_difference(int *set_a, int *set_b, int n, int *set_difference);
int main(void)
{
int i, k;
int n;
printf("Enter the number of elements in set A: \n");
scanf("%d", &n);
int a[n];
printf("Enter the elements in set A: \n");
for(i=0; i<n; i++){
scanf("%d", &a[k]);
a[k] = 1;
}
printf("Enter the number of elements in set B: \n");
scanf("%d", &n);
int b[n];
printf("Enter the elements in set B: \n");
for(i=0; i<n; i++){
scanf("%d", &b[k]);
b[k] = 1;
}
int set_dif[N];
find_set_difference(a, b, N, set_dif);
printf("The difference of set A and set B is: \n");
for(i=0;i<10;i++){
if(set_dif[i]==1)
printf("%d ",i);
}
return 0;
}
void find_set_difference(int *set_a, int *set_b, int n, int *set_difference){
int *p, *q;
for(p=set_a; p<set_a+n; p++){
for(q=set_b; q<set_b+n; q++){
if(p==1 && q==0)
set_difference = 1;
else
set_difference = 0;
}
}
}
任何有关格式化和使用指针的帮助都会有所帮助,因为我还是编码新手,并且难以理解这些概念。
【问题讨论】:
-
b[k]=1将设置值 1 无论您之前输入什么。 -
set_difference是指向数组的指针。你期待set_difference = 1;做什么?我认为您想分配给数组的一个元素,而不是数组本身。 -
你永远不会在
&a[k]之前设置k。我想你的意思是&k。 -
如果
n大于10怎么办?为什么不对set_dif使用与a相同的大小? -
如果集合 A 中的元素数量与集合 B 不同怎么办?您只是将
b的大小传递给函数。您需要将其置于不同的变量中。
标签: c