Arrays 通过函数传递数组将用零填充它 void print_数组(int*array,int n) { 对于(int j=0;j

Arrays 通过函数传递数组将用零填充它 void print_数组(int*array,int n) { 对于(int j=0;j,arrays,c,Arrays,C,我在代码中遇到了一个问题,在尝试对其进行故障排除时,我将其简化为您在上面看到的内容。 当我从函数print_array外部打印数组时,它工作正常。 但是,当我从函数中打印数组时,数组中的每个元素之间都会出现一个零。 例如,对于数组{20,30,55,87,38,91,7,78},程序将打印{20,0,30,0,55,0,87,0,38,0,91,0,7,0,78,0} 我以前从未遇到过这个问题。任何帮助都将不胜感激。这将解决您的问题 intmain() { int数组[]={20,30,55,8

我在代码中遇到了一个问题,在尝试对其进行故障排除时,我将其简化为您在上面看到的内容。 当我从函数print_array外部打印数组时,它工作正常。 但是,当我从函数中打印数组时,数组中的每个元素之间都会出现一个零。 例如,对于数组{20,30,55,87,38,91,7,78},程序将打印{20,0,30,0,55,0,87,0,38,0,91,0,7,0,78,0}
我以前从未遇到过这个问题。任何帮助都将不胜感激。

这将解决您的问题

intmain()
{
int数组[]={20,30,55,87,38,91,7,78};//更改此行
打印_数组(数组,8);
对于(int j=0;j<8;j++)
{
printf(“%d”,数组[j]);
}
}

发生此错误的原因是
数组
变量是指向
int
的指针数组,这是不正确的。

这应该可以解决您的问题

intmain()
{
int数组[]={20,30,55,87,38,91,7,78};//更改此行
打印_数组(数组,8);
对于(int j=0;j<8;j++)
{
printf(“%d”,数组[j]);
}
}

发生此错误的原因是
array
变量是指向
int
的指针数组,这是不正确的。

您声明的是
int*array[]
而不是
int array[]
,这是唯一的错误。 我不知道你在使用什么编译器,但你应该启用警告。如果存在一个或多个警告,将创建exe,但您永远不会知道以下警告:

void print_array(int *array, int n)
{
    for (int j = 0; j < n; j++)
    {
        printf("%d ", array[j]);
    }
    printf("\n");
}

int main()
{
    int *array[] = {20,30,55,87,38,91,7,78};

    print_array(array, 8);

    for (int j = 0; j < 8; j++)
    {
        printf("%d ", array[j]);
    }
}
现在它工作得很好

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
#包括
无效打印数组(int*数组,int n){
对于(int j=0;j
您声明的是
int*数组[]
而不是
int数组[]
,这是唯一的错误。 我不知道你在使用什么编译器,但你应该启用警告。如果存在一个或多个警告,将创建exe,但您永远不会知道以下警告:

void print_array(int *array, int n)
{
    for (int j = 0; j < n; j++)
    {
        printf("%d ", array[j]);
    }
    printf("\n");
}

int main()
{
    int *array[] = {20,30,55,87,38,91,7,78};

    print_array(array, 8);

    for (int j = 0; j < 8; j++)
    {
        printf("%d ", array[j]);
    }
}
现在它工作得很好

warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
#包括
无效打印数组(int*数组,int n){
对于(int j=0;j
int*数组[]={20,30,55,87,38,91,7,78}是不正确的代码。非零整数不能用于初始化指针

如果您没有收到编译器错误消息,那么您必须做的第一件事就是更改编译器设置,以便生成此代码的错误消息

您的其他问题源于试图运行错误的代码;由于没有正确调用编译器,您已经浪费了很多时间


注意。这是非常重要的。我写这篇文章是为了回答这个问题,因为95%的时候,当我对此发表评论时,OP忽略了评论,并继续与错误代码的下游影响作斗争。

int*array[]={20,30,55,87,38,91,7,78}是不正确的代码。非零整数不能用于初始化指针

如果您没有收到编译器错误消息,那么您必须做的第一件事就是更改编译器设置,以便生成此代码的错误消息

您的其他问题源于试图运行错误的代码;由于没有正确调用编译器,您已经浪费了很多时间


注意。这是非常重要的。我写这篇文章是为了回答这个问题,因为95%的时候当我对这个问题发表评论时,OP会忽略这个评论,并继续与错误代码的下游影响作斗争。

hi,有趣的是,也许使用
int**array
作为
print\u array
参数的类型,否则指针类型不兼容。请注意数组声明
int*array[]
与函数
print\u array(int*array,int n)
之间的差异。您可能打算像
intarray[]=…
那样声明数组,这就是问题所在。。。我想知道为什么它会产生这样一个奇怪的错误?因为指针是8字节,int是4字节。main和函数内部类型的差异意味着索引时使用的指针数学不同。您好,有趣的是,可能使用
int**array
作为
print\u array
参数的类型,否则指针类型不兼容。请注意数组声明
int*array[]
和函数
打印数组(int*array,int n)
。您可能打算像
intarray[]=…
那样声明数组,这就是问题所在。。。我想知道为什么它会产生这样一个奇怪的错误?因为指针是8字节,int是4字节。main和函数内部类型的不同意味着索引时使用的指针数学不同。