在C中更改数字数组中的值
我想制作一个程序,使用我创建的函数,它将数组X(长度为N)的所有元素与某个数字K交换,前提是该元素大于K。我在这里哪里出错了在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
#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
}