簡體   English   中英

如何在另一個 function 中編輯數組而不是 c 編程中的主 function?

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

我想將數組中的每個元素增加一個 function 而不是主 function。 然后,我想調用這個 function 並在主 function 中打印。

#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] array了一個包含 5 個元素的數組。
  • 訪問超出分配數組末尾的元素具有未定義的行為,但通常會崩潰。
  • 如果你聲明一個變量int answer它不是一個數組,也不能成為一個數組。 它只是一個int
  • 如果要復制數組,則需要顯式復制。 有標准庫可以做到這一點,但您應該學會將每個元素一個一個地復制到新數組中。

function 的返回類型int沒有意義。

int function(int array2[5]) {

此外,您正試圖返回僅包含 5 個元素的數組中不存在的第 6 個元素。

return array2[5];

在 function 中,您使用的是未初始化的變量i

int function(int array2[5]) {

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

這會導致未定義的行為。 此外,使用的幻數4至少沒有任何意義,因為您試圖將具有5元素的數組傳遞給 function。

function 應使用第二個參數聲明,該參數指定傳遞數組中的元素數。 本 function 聲明

int function(int array2[5]);

並不意味着傳遞給 function 數組的元素正好有5 編譯器會將 function 的參數聲明調整為指向數組元素類型的指針,如

int function(int *array2);

在這個主要的聲明中

int answer;

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

您正在使用帶有標量類型int的 object 的下標運算符。 所以編譯器會發出錯誤信息。

這是一個演示程序,展示了如何定義 function。

#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;
}

程序 output 是

1 2 3 4 5 
2 3 4 5 6 

那里有 go。 我想這就是你想要的:

#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;
}

這是 output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM