[英]Changing the values in a number array in 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("%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;
}
在swap_K(int *X, int K)
, 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
例如:
#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
}
您的循環不正確
for (i=1; i<=sizeof(X)/sizeof(int); i++)
它應該是
for (i=0; i<N; i++)
發布的代碼存在幾個問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.