我想创建一个程序,它使用我创建的函数,它将数组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;
}
答案 0 :(得分:1)
在swap_K(int *X, int K)
中,sizeof(X)
为sizeof(int *)
,而不是数组的大小。
在C中,指针与数组实际上并不相同。
要解决此问题,请在任何地方使用N
代替sizeof(X)/sizeof(int)
,尤其是在swap_K()
内。
答案 1 :(得分:0)
1)数组以索引0
开头。
2)在您的main
功能中,您不需要在sizeof(X)/sizeof(int)
循环中使用for
,因为您已经知道它等于N
。
3)当您将数组传递给函数时,您将发送衰减为指针的数组的基址,因此在swap_K
函数中,sizeof(X)
将返回sizeof(int)
是4
(通常)。
要解决此问题,您应该从main
函数发送数组的大小。例如:swap_K(X,K,N);
4)当您从X
函数发送swap_K
的基址时,您无需从X
返回main
。
例如:
#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
}
答案 2 :(得分:0)
您的循环不正确
for (i=1; i<=sizeof(X)/sizeof(int); i++)
应该是
for (i=0; i<N; i++)
答案 3 :(得分:0)
发布的代码有几个问题: