Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我试图使用指针合并两个排序(int)数组,出于某种原因,它存储地址_C_Arrays_Pointers - Fatal编程技术网

C 我试图使用指针合并两个排序(int)数组,出于某种原因,它存储地址

C 我试图使用指针合并两个排序(int)数组,出于某种原因,它存储地址,c,arrays,pointers,C,Arrays,Pointers,所以我尝试使用带有函数“interclas”的指针将两个排序数组合并成一个新数组。我尝试使用相同的方法对函数中带有指针的数组进行排序,结果很好。正如您所看到的,它存储的是变量的地址,而不是变量本身。 如果我运行它,它将存储数组的地址。我怎样才能解决这个问题?我仍然不熟悉方法主体中的指针,更改: void interclas(int *ptr,int *vec, int *c, int n) { int i,j,tmp; tmp=0; for (i=0;i++;i<n

所以我尝试使用带有函数“interclas”的指针将两个排序数组合并成一个新数组。我尝试使用相同的方法对函数中带有指针的数组进行排序,结果很好。正如您所看到的,它存储的是变量的地址,而不是变量本身。
如果我运行它,它将存储数组的地址。我怎样才能解决这个问题?我仍然不熟悉方法主体中的指针,更改:

void interclas(int *ptr,int *vec, int *c, int n) {
    int i,j,tmp;
    tmp=0;
    for (i=0;i++;i<n)
        for (j=0;i++;j<n)
        {
            if (vec[j]<=ptr[i])
                c[tmp]=vec[j];
            else
                c[tmp]=ptr[i];
            tmp++;
        }
}

int main() {
    int i,n;
    int *ptr,*vec,*c;

    printf("Nr. of elements of initial arrays : 5 \n");
    n=5;
    vec=(int*)malloc( n * sizeof(int));
    ptr=(int*)malloc( n * sizeof(int));

    c=(int*)malloc( 2 * n * sizeof(int));
    for (i=0;i<n;i++) {
        scanf("%d",&ptr[i]);
    }
    for (i=0;i<n;i++) {
        scanf("%d",&vec[i]);
    }

    printf("\n");
    printf("Initial arrays are : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }
    printf("\n");
    for (i=0;i<n;i++) {
        printf("%d ",vec[i]);
    }

    interclas(ptr,vec,&c,n);

    printf("Merged array is : ");
    for (i=0;i<10;i++) {
        printf("%d ",c[i]);
    }
    return 0;
}
为此:

for (i=0;i++;i<n)
    for (j=0;i++;j<n)
interclas(ptr, vec, &c, n);
因为原型需要指向int的指针,所以对于第三个参数

方法的逻辑也有缺陷,请尝试放置一些printf,例如printfhere i=%d,j=%d,ptr[i]=%d,vec[j]=%d,tmp=%d\n,i,j,ptr[i],vec[j],tmp;要查看变量在迭代时的值,只需合并第一个数组的前两个元素

如果您仔细考虑一下,您想做的是遍历数组ptr和vec的第一个元素,并存储这两个元素中的最小值。如果现在min是数组ptr,那么您希望考虑ptr的下一个元素,否则将考虑vec的下一个元素

拿一支铅笔和一张纸,画出这个算法——你会看到它运行得很好,但是一些剩余的元素可能会被留下,而不会被插入到输出数组中

根据观察结果,在遍历数组并比较元素之后,如果需要,我们将在第一个数组上循环,以收集未访问的元素。第二个数组也是如此

编码思想会产生如下结果:

interclas(ptr, vec, c, n);

不是问题的根源,但不是。在方法的主体中,更改:

void interclas(int *ptr,int *vec, int *c, int n) {
    int i,j,tmp;
    tmp=0;
    for (i=0;i++;i<n)
        for (j=0;i++;j<n)
        {
            if (vec[j]<=ptr[i])
                c[tmp]=vec[j];
            else
                c[tmp]=ptr[i];
            tmp++;
        }
}

int main() {
    int i,n;
    int *ptr,*vec,*c;

    printf("Nr. of elements of initial arrays : 5 \n");
    n=5;
    vec=(int*)malloc( n * sizeof(int));
    ptr=(int*)malloc( n * sizeof(int));

    c=(int*)malloc( 2 * n * sizeof(int));
    for (i=0;i<n;i++) {
        scanf("%d",&ptr[i]);
    }
    for (i=0;i<n;i++) {
        scanf("%d",&vec[i]);
    }

    printf("\n");
    printf("Initial arrays are : ");
    for (i=0;i<n;i++) {
        printf("%d ",ptr[i]);
    }
    printf("\n");
    for (i=0;i<n;i++) {
        printf("%d ",vec[i]);
    }

    interclas(ptr,vec,&c,n);

    printf("Merged array is : ");
    for (i=0;i<10;i++) {
        printf("%d ",c[i]);
    }
    return 0;
}
为此:

for (i=0;i++;i<n)
    for (j=0;i++;j<n)
interclas(ptr, vec, &c, n);
因为原型需要指向int的指针,所以对于第三个参数

方法的逻辑也有缺陷,请尝试放置一些printf,例如printfhere i=%d,j=%d,ptr[i]=%d,vec[j]=%d,tmp=%d\n,i,j,ptr[i],vec[j],tmp;要查看变量在迭代时的值,只需合并第一个数组的前两个元素

如果您仔细考虑一下,您想做的是遍历数组ptr和vec的第一个元素,并存储这两个元素中的最小值。如果现在min是数组ptr,那么您希望考虑ptr的下一个元素,否则将考虑vec的下一个元素

拿一支铅笔和一张纸,画出这个算法——你会看到它运行得很好,但是一些剩余的元素可能会被留下,而不会被插入到输出数组中

根据观察结果,在遍历数组并比较元素之后,如果需要,我们将在第一个数组上循环,以收集未访问的元素。第二个数组也是如此

编码思想会产生如下结果:

interclas(ptr, vec, c, n);

不是问题的根源,但不是。

&c是指向变量c的指针,它是指向指针的指针,类型为int**。你的编译器没有警告你把int**传递给一个需要int*作为参数的函数吗?在C语言中,你不必也不应该这样做。这是因为我的老师让我们用这种方式编写程序。我们可以在考试中得到它,所以我试着适应它@一些编程人员警告我,函数中的for循环是:对于j=0,语句无效[-wunused value];i++;j&c是指向变量c的指针,它是指向指针的指针,类型为int**。你的编译器没有警告你把int**传递给一个需要int*作为参数的函数吗?在C语言中,你不必也不应该这样做。这是因为我的老师让我们用这种方式编写程序。我们可以在考试中得到它,所以我试着适应它@一些编程人员警告我,函数中的for循环是:对于j=0,语句无效[-wunused value];i++;吉是这样做的。我不知道我怎么没看到它!现在它存储变量。虽然它只存储1和2,但对于ptr=12345和vec=34567,c=12122@manubmxnsb事实上,由于您的方法的逻辑存在缺陷,请检查我的更新答案,并让我知道您对此的看法!:它们是同义词,而i你想想看!:它们是同义词,而i