如何在 c 编程中的主函数之外的另一个函数中编辑数组?

How to edit an array in another function than the main function in c programming?

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

#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 中传递数组时,不会创建副本。是同一个数组,所以修改传入的数组就是修改原来的数组。
  • [] 是运算符,不是变量名的一部分。
  • [] 在声明类型时的工作方式与在表达式中使用时的工作方式不同。 array[5] 给出了 array 中的第 6 个元素,但是 int array[5] 声明了一个包含 5 个元素的数组。
  • 访问超出分配数组末尾的元素具有未定义的行为,但通常会崩溃。
  • 如果你声明一个变量int answer它不是一个数组,也不能成为一个数组。就一个int
  • 如果你想复制一个数组,你需要显式复制。有一些标准库可以做到这一点,但您应该学会将每个元素一个一个地复制到新数组中。

给你。我想这就是你想要的:

#include <stdio.h>

// Since the array named parameters are scoped only within its function,
// they are apart from your array in the main.
void function(int array[], int len) {
    
    int i = 0;
    while(i<len) {
        array[i]=array[i]+1;
        i++;
    }
}

// Or alternatively you can process the array using a pointer
void functionWithPointer(int *array, int len) {
    
    int i = 0;
    while(i<len) {
        *(array+i) = *(array+i)+1;
        i++;
    }
}

int main() {
    int array[]={1,2,3,4,5};
//  int answer; // Not necessary
    int length = sizeof(array) / sizeof(int); // !!!ATTENTION
    
    function(array, length);
    
    // The array values updated by 1
    printf("Array values after 1st update\n");
    for(int k=0; k<length; k++) {
        printf("%d \n",array[k]);
    }
    
    functionWithPointer(array, length);
    
    // The array values updated by 1 again
    printf("Array values after 2nd update\n");
    int j;
    while(j<length) {
        printf("%d \n",array[j]);
        j++;
    }
    
    return 0;
}

这是输出:

Array values after 1st update
2 
3 
4 
5 
6 
Array values after 2nd update
3 
4 
5 
6 
7 

函数的return类型int没有意义。

int function(int array2[5]) {

此外,您正在尝试 return 只有 5 个元素的数组中不存在的第 6 个元素。

return array2[5];

在您使用未初始化变量的函数中 i

int function(int array2[5]) {

    int i;
    while(i<4) {
    //...

这会导致未定义的行为。此外,所使用的幻数 4 至少没有意义,因为您试图将包含 5 元素的数组传递给函数。

该函数应使用第二个参数声明,该参数指定传递的数组中的元素数。这个函数声明

int function(int array2[5]);

并不意味着传递给函数的数组恰好有 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;
}

程序输出为

1 2 3 4 5 
2 3 4 5 6