Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在c编程中,如何在主函数之外的其他函数中编辑数组?_Arrays_C_Increment_Function Definition - Fatal编程技术网

Arrays 在c编程中,如何在主函数之外的其他函数中编辑数组?

Arrays 在c编程中,如何在主函数之外的其他函数中编辑数组?,arrays,c,increment,function-definition,Arrays,C,Increment,Function Definition,我想在另一个函数中将数组中的每个元素增加一个,而不是主函数。然后,我想调用这个函数并在main函数中打印 #include <stdio.h> int function(int array2[5]) { int i; while(i<4) { array2[i]=array2[i]+1; i++; } return array2[5]; } int main() { int array[5]={1,2,3,

我想在另一个函数中将数组中的每个元素增加一个,而不是主函数。然后,我想调用这个函数并在main函数中打印

#include <stdio.h>

int function(int array2[5]) {

    int i;
    while(i<4) {
        array2[i]=array2[i]+1;
        i++;
    }

    return array2[5];
}

int main() {
int array[5]={1,2,3,4,5};
int answer;

answer[5]=function(array[5]);

int j;
while(j<4) {
    printf("%d \n",answer[j]);
    j++;
}

return 0;
}

需要了解的一些重要事项:

在C中传递数组时,不进行复制。它是同一个数组,因此修改传入的数组会修改原始数组。 []是运算符,不是变量名的一部分。 []在声明类型时的工作方式与在表达式中使用时不同。数组[5]给出了数组中的第6个元素,但int数组[5]声明了一个包含5个元素的数组。 访问分配数组末尾以外的元素具有未定义的行为,但通常会崩溃。 如果声明变量int-answer,则它不是数组,不能成为数组。它只是一个int 如果要创建数组的副本,则需要显式复制。有一些标准库可以做到这一点,但您应该学会将每个元素逐个复制到新数组中。
好了。我想这就是你想要的:

包括 //由于命名参数数组的作用域仅限于其函数内, //它们主要与您的阵列分开。 无效函数int数组[],int len{ int i=0; 而函数的返回类型int没有意义

int function(int array2[5]) {
而且,您试图返回一个只有5个元素的数组中不存在的第6个元素

return array2[5];
在函数中使用未初始化的变量i

这并不意味着传递给函数数组的正好有5个元素。编译器将调整函数的参数声明,使其指针指向数组元素类型,如

int function(int *array2);
在本声明中,主要

int answer;

answer[5]=function(array[5]);
您正在对标量类型int的对象使用下标运算符。因此编译器将发出错误消息

下面是一个演示程序,演示如何定义函数

#include <stdio.h>

void function( int a[], size_t n ) 
{
    for ( ; n--; ++a )
    {
        ++*a;
    }
}

int main(void) 
{
    int a[] = { 1, 2, 3, 4, 5 };
    const size_t N = sizeof( a ) / sizeof( *a );
    
    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d ", a[i] );
    }
    
    putchar( '\n' );
    
    function( a, N );
    
    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d ", a[i] );
    }
    
    putchar( '\n' );
    
    return 0;
}

声明数组[5]时会给出大小,但在此之后,它会访问数组中的第6个元素。而answer根本不是数组。请说明您认为这意味着什么,做了什么,以及编译器对此有什么警告或错误,特别是在有严格警告的情况下:answer[5]=functionarray[5].为此,您必须编译您在这里展示的代码,我怀疑这是您家里的代码。也就是说,请确保您确实提供了一个。非常感谢,先生!@berkyamanlar不客气。欢迎您。非常感谢,先生!非常感谢,先生!
int function(int *array2);
int answer;

answer[5]=function(array[5]);
#include <stdio.h>

void function( int a[], size_t n ) 
{
    for ( ; n--; ++a )
    {
        ++*a;
    }
}

int main(void) 
{
    int a[] = { 1, 2, 3, 4, 5 };
    const size_t N = sizeof( a ) / sizeof( *a );
    
    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d ", a[i] );
    }
    
    putchar( '\n' );
    
    function( a, N );
    
    for ( size_t i = 0; i < N; i++ )
    {
        printf( "%d ", a[i] );
    }
    
    putchar( '\n' );
    
    return 0;
}
1 2 3 4 5 
2 3 4 5 6