在C中更改数字数组中的值

在C中更改数字数组中的值,c,C,我想制作一个程序,使用我创建的函数,它将数组X(长度为N)的所有元素与某个数字K交换,前提是该元素大于K。我在这里哪里出错了 #include <stdio.h> #include <stdlib.h> int swap_K(int *, int); int main() { int N,i,K; printf("Enter N: "); scanf("%d",&N); printf("Enter K: "); scanf

我想制作一个程序,使用我创建的函数,它将数组X(长度为N)的所有元素与某个数字K交换,前提是该元素大于K。我在这里哪里出错了

#include <stdio.h>
#include <stdlib.h>

int swap_K(int *, int);
int main()
{
    int N,i,K;
    printf("Enter N: ");
    scanf("%d",&N);
    printf("Enter K: ");
    scanf("%d",&K);
    int X[N];
    for (i=1; i<=sizeof(X)/sizeof(int); i++){
       printf("Enter %d. element: ",i);
       scanf("%d",&X[i]);
    }
    swap_K(X,K);

    for (i=1; i<=sizeof(X)/sizeof(int); i++){
        printf("%d",X[i]);
    }
}

int swap_K(int *X, int K)
{
    int i;
    for (i=1; i<=sizeof(X)/sizeof(int); i++){
        if (X[i]>K)
            X[i]=K;
    }
    return X;
}
#包括
#包括
整数交换K(整数*,整数);
int main()
{
int N,i,K;
printf(“输入N:”);
scanf(“%d”和“&N”);
printf(“输入K:”);
scanf(“%d”和“&K”);
int X[N];
对于
swap_K(int*X,int K)
中的(i=1;i,
sizeof(X)
sizeof(int*)
,而不是数组的大小

在C语言中,指针实际上与数组不同

要修复它,请使用
N
而不是
sizeof(X)/sizeof(int)
到处都可以,尤其是
swap_K()

1)数组中以索引
0
开头

2) 在
main
函数中,您不需要在
for
循环中使用
sizeof(X)/sizeof(int)
,因为您已经知道它等于
N

3) 当您将数组传递给函数时,您发送的是数组的基址,该基址衰减为指针,因此在
swap_K
函数中,
sizeof(X)
将返回
sizeof(int)
,通常为
4

要解决这个问题,您应该从
main
函数发送数组的大小。例如:
swap_K(X,K,N);

4) 当您从
main
函数发送
X
的基址时,不需要从
swap_K
返回
X

例如:


#包括
#包括
整数交换K(整数*,整数,整数);
int main()
{
int N,i,K;
printf(“输入N:”);
scanf(“%d”和“&N”);
printf(“输入K:”);
scanf(“%d”和“&K”);
int X[N];
对于(i=0;i您的循环不正确


对于(i=1;i发布的代码有几个问题:

  • C中的数组是0索引的,因此for循环应该总是从0迭代到N-1。迭代超过N是缓冲区溢出
  • 指向数组的指针只是指向数组第一个元素的指针。swap函数无法知道传递给它的指针是数组的一部分还是单个值。考虑到这一点,它需要使用另一个参数,告诉传入数组的大小是多少。循环内的迭代将使用该值代替sizeof(X)/sizeof(int)=1
  • 您将X定义为完全在堆栈上分配的可变大小数组。引入一个相当大的N将使您的程序崩溃。如果您不知道输入的大小,最好在堆中分配数组

  • 可能与您得到的特定错误重复?数组也从0开始。没有任何错误,编译很好,但它只更改数组的第一个元素。此外,将i从1更改为0,“它只更改数组的第一个元素。Esp.在swap_K()中使用N).我会给每个人投票,但我需要声誉或smth,我不知道,我在这里特别为这个问题做了说明。谢谢你,伙计!
    #include <stdio.h>
    #include <stdlib.h>
    
    int swap_K(int *, int, int);
    int main()
    {
        int N,i,K;
        printf("Enter N: ");
        scanf("%d",&N);
        printf("Enter K: ");
        scanf("%d",&K);
        int X[N];
        for (i=0; i<N; i++)
        {
           printf("Enter %d. element: ",i);
           scanf("%d",&X[i]);
        }
        swap_K(X,K,N);
        for (i=0; i<N; i++)
        {
            printf("%d",X[i]);
        }
    }
    
    int swap_K(int *X, int K,int N)
    {
        int i;
        for (i=0; i<N; i++)
        {
            if (X[i]>K)
                X[i]=K;
        }
       //return X;  //This is not required
    }