我尝试运行这个程序:
void get_set(int size, int arr[])
{
int i;
printf("Enter number of values to the array : \n");
scanf("%d", &size);
printf("\n");
for (i = 0; i < size; i++)
{
printf("Value at %dth place is : \n", i + 1);
if (scanf("%d", &arr[i]) == EOF)
{
break;
}
}
}
void print_set(int size, int arr[])
{
int i, flag = 0;
if (flag == 0)
{
printf("\nOriginal array is : ");
for (i = 0; i < size; i++)
{
printf("%d,", arr[i]);
}
printf("\n");
}
else
{
printf("\nArray after deleting duplicates : ");
for (i = 0; i < size; i++)
{
printf("%d,", arr[i]);
}
printf("\n");
}
flag + 1;
}
void RemoveDuplicates(int size, int arr[])
{
int i, j, k;
for (i = 0; i < size; i++)
{
for (j = 0; j < i; j++)
{
if (arr[i] == arr[j])
{
size--;
for (k = i; k < size; k++)
{
arr[k] = arr[k + 1];
}
i--;
}
}
}
}
int main()
{
int size = 0;
int arr[64] = {0};
get_set(size, arr);
print_set(size, arr);
RemoveDuplicates(size, arr);
print_set(size, arr);
return 0;
}
简而言之,程序获取一个包含我输入的值的数组,并将其传递给其他函数。 我无法让它将数组和大小传递给其他函数。我试图避免全局变量;我做错了什么?
最佳答案
main
中的 size
变量按值传递给 get_set
,因此它仍然是 0
主要
。您应该让 get_set
返回大小并将结果分配给 size
变量(或通过引用传递 size
),以便您可以将其传递给print_set
和 RemoveDuplicates
。
get_set
实际上并不需要 size
作为参数,除非您更改它的含义以指示数组的容量并添加错误检查以确保您不需要不要溢出它。
arr
变量通过引用传递,因为它是一个会衰减为指针的数组,因此 get_set
将修改 main
中的变量.
关于c - 如何避免使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460711/