所以,我得到了一个赋值,它要求我比较两个整数数组(a[5]和b[8]),并使用指针检查重复的元素。
到目前为止,这是我想出的密码:
int main(void) {
int *pa, i, j, sizeA=5, sizeB=8, a[sizeA], b[sizeB], aux[sizeB];
for (i=0; i<sizeA; i++){
scanf("%d", &a[i]);
}
for (i=0; i<sizeB; i++){
scanf("%d", &b[i]);
}
for (i=0; i<sizeB; i++){
aux[i] = NULL;
}
for(i=0;i<sizeA; i++){
for(j=0; j<sizeB; j++){
if ((a[i] == b[j]))
aux[i] = b[j];
}
}
for(i=0;i<sizeA; i++){
pa = &aux[i];
if ((pa != NULL)&&(*pa!=aux[i+1])){
printf("%d \n", *pa);
}
}
return (EXIT_SUCCESS);
}
它在编译和运行时没有错误,但是当没有重复的元素时,最后一个for循环会打印一些奇怪的值,比如435304。
我试图让指针“pa”扫描数组“aux”,只打印与数组上下一个不同的元素,并检查指针所指向的位置是否为空。
有什么建议吗?
编辑:我解决了用空值初始化aux数组的问题。这算不算有效的解决方案?有更好的办法吗?
伊迪丝2:谢谢所有帮助我的人。祝您有个美好的一天。
最佳答案
您只在aux
上写相等的内容,这意味着aux
的内容将是B的内容的子集,但您是用sizeB
大小声明它,而不是初始化它的内容。这意味着在创建时,aux
的内容都是内存垃圾。因为,根据子集定义,您将不写入而保留aux
的位置(除非A=B),未写入的位置保持未写入,因此最终包含gargabe。初始化它以避免出现问题:
int myArray[10] = { -1 }; //all elements to -1
在找到
-1
或任何其他要用于标记空位置的值时停止迭代。关于c - 检查指针是否指向int数组上的空白区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18314947/