【问题标题】:C array manipulation in function函数中的 C 数组操作
【发布时间】:2021-07-02 23:05:36
【问题描述】:

在这段代码中,我希望用户在函数中输入数字,然后在 main 方法中打印数组,但是当我尝试在 main 方法中打印时,它给了我随机数。

例如: 1 2 3 给 1 3 1895586112

void arrayInput(int *arr) {
    int x;
    int y;
    int z;
    printf("enter 3 numbers =");
    scanf("%d %d %d", &x,&y,&z);
    arr[0]=x;
    arr[1]=y;
    arr[2]=z;
}

int main(int argc, char **argv){
    int *arr[3];
    arrayInput(&arr);
    int i;
    for(i=0; i<3; i++)  
    {  
        printf("%d ", arr[i]);  
    } 
}

我想在不改变方法或参数类型的情况下改变数组值

【问题讨论】:

  • int *arr[3]; -> int arr[3];
  • 只要注意你的编译器。您发布的代码不是有效的 C 语言,编译器也告诉了您很多。如果您是初学者并使用 gcc,请使用 -Wall -Wextra -Werror 之类的内容进行编译。

标签: arrays c function methods


【解决方案1】:

int *arr[3] 是指向int 的指针数组。但是你想要一个int 的数组。

简单的改变:

int *arr[3];
arrayInput(&arr);

int arr[3];
arrayInput(arr);

这应该包含在您的 C 教科书中。

奖励:

你可以替换这个复杂的代码:

void arrayInput(int *arr) {
    int x;
    int y;
    int z;
    printf("enter 3 numbers =");
    scanf("%d %d %d", &x,&y,&z);
    arr[0]=x;
    arr[1]=y;
    arr[2]=z;
}

用这个:

void arrayInput(int *arr) {
    printf("enter 3 numbers =");
    scanf("%d %d %d", &arr[0],&arr[1], &arr[2]); 
}

【讨论】:

  • 更好int arrayInput(int *arr) { ... return scanf("%d %d %d", &amp;arr[0],&amp;arr[1], &amp;arr[2]) == 3; }
  • @0___________ scanf 无论如何都不适合用户输入,但是在没有错误检查玩具程序的情况下使用它是可以的 IMO。
  • 谢谢,这似乎工作得很好。奖金也很有帮助:)
【解决方案2】:

您的代码存在多个问题。 首先,您声明了int *arr[3];,这意味着指针数组。对于您的任务,需要一个简单的数组。数组变量包含第一个元素的地址,因此您不需要&amp;。 一个简单的修正代码如下:

#include <stdio.h>

void arrayInput(int arr[]) {
    int x;
    int y;
    int z;
    printf("enter 3 numbers =");
    scanf("%d %d %d", &x,&y,&z);
    arr[0]=x;
    arr[1]=y;
    arr[2]=z;
}

int main(int argc, char **argv){
    int arr[3];
    arrayInput(arr);
    int i;
    for(i=0; i<3; i++)  
    {  
        printf("%d ", arr[i]);  
    } 
}

【讨论】:

  • “这意味着指向数组的指针”不,它意味着 3 个指针的数组 int指向数组的指针 int[3]int (*arr)[3]; 大不相同。 指针数组就是这样,一个元素为指针的数组。 指向数组的指针 是指向数组类型的单指针。 (但我知道您的意思并且您的代码更正是正确的,但是该语言可能会让 OP 对 指向数组的指针 是什么产生错误印象)
  • 是的,你是对的,我有一个“to”作为错误。
  • 好多了。不像我的答案中从未有过流浪"to"或其他误称:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2018-05-13
相关资源
最近更新 更多