所以,我得到了一个赋值,它要求我比较两个整数数组(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/

10-11 22:59