函数中的 C 数组操作

问题描述

在这代码中,我希望用户函数输入数字,然后在 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 的指针数组。但是你想要一个 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 *arr[3]; 这意味着指针数组。对于您的任务,需要一个简单的数组。数组变量包含第一个元素的地址,因此您不需要 &。 简单修正后的代码如下:

#include <stdio.h>

void arrayInput(int arr[]) {
    int x;
    int y;
    int z;
    printf("enter 3 numbers =");
    scanf("%d %d %d",&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]);  
    } 
}