C 언어에서 함수는 배열(1차원 및 2차원)을 반환합니다.

C 언어의 함수 반환 배열은 매우 중요한 응용 프로그램입니다. 때로는 프로그램에서 함수를 호출하여 배열을 반환하면 한 번에 여러 값을 반환하는 등 원하는 특정 작업을 더 쉽게 달성할 수 있습니다. C 언어에서 1차원 배열과 2차원 배열을 반환하는 함수.


이 함수는 1차원 배열을 반환합니다.

함수가 1차원 배열을 반환할 때 주의할 점은 함수를 정의할 때 함수 유형 뒤에 * 기호를 추가해야 하며, 함수 본문에 정의된 1차원 배열에는 static 키워드를 추가해야 한다는 점입니다. 해당 유형의 앞부분, 함수 본문에 정의됨 배열의 길이를 결정해야 합니다.
1차원 배열을 반환하는 간단한 함수에 대한 C 코드는 다음과 같습니다.

# include <stdio.h>

int* return_array ()  // 在定义返回一维数组的函数时,在定义的函数类型后要加*号
{
    
    
    static int a[10];  //这里一定要加上static,这样数组a就是一个静态数组了,数组长度需要再这里确定
    for(int i=0; i<10; i++)
        a[i] = i;
    return a;
}

int main ()
{
    
       
    int *array;
    array = return_array(); //调用函数
    for(int i=0; i<10; i++)
        printf("array[%d] = %d\n",i,array[i]);
}

위 코드에서 가장 중요한 부분은 함수 본문에서 배열을 정의하는 부분인데 왜 배열의 타입을 정적 배열로 정의해야 하는가, 즉 그 타입 앞에 static 키워드를 추가해야 할까요? 이는 정적 배열의 수명 주기가 프로그램 실행부터 끝까지 전체 프로그램을 통해 실행되기 때문이며, static 키워드를 추가하지 않으면 함수 본문에 정의한 배열이 지역 변수이므로 반환 값은 위의 함수는 지역 변수 a 입니다. 함수가 호출된 후에는 배열 a 의 값이 더 이상 존재하지 않으므로, 메인 함수에서 함수를 호출해도 배열에 저장된 값을 얻을 수 없습니다.
위의 코드를 실행한 결과는 아래 그림과 같습니다.
여기에 이미지 설명을 삽입하세요.
보시다시피, 함수 본문에 정의된 배열 값을 출력하려면 메인 함수에서 함수를 호출하는 것이 맞습니다!
배열을 정의할 때 static 키워드를 추가하지 않으면 출력 결과는 아래와 같습니다.
여기에 이미지 설명을 삽입하세요.
작업 결과로 경고가 나타납니다. 함수가 지역 변수의 주소를 반환하므로 배열의 각 값이 올바르게 출력되지 않습니다.


이 함수는 2차원 배열을 반환합니다.

함수가 2차원 배열을 반환할 때 주의할 점은 함수를 정의할 때 함수 유형 뒤에 * 기호를 두 개 추가해야 하며, 함수 본문에 정의된 2차원 배열에 행을 할당해야 한다는 점입니다. 길이와 열 길이를 순서대로 지정하고, 차원 배열의 길이를 결정해야 합니다.
2차원 배열을 반환하는 간단한 함수에 대한 C 코드는 다음과 같습니다.

# include <stdio.h>
# include <stdlib.h>

int** return_array ()
{
    
    
    int** a; 
    a = (int**)malloc(5*sizeof(int*));  //分配行长度
    for(int i=0; i<5; i++)
        a[i] = (int*)malloc(5*sizeof(int));  //分配列长度

    for(int i=0; i<5; i++)   //给数组赋初值
        for(int j=0; j<5; j++)
            a[i][j] = i*10+j;
    return a;
}

int main ()
{
    
       
    int **array;
    array = return_array(); //调用函数
    for(int i=0; i<5; i++)
    {
    
    
        for(int j=0; j<5; j++)
            printf("array[%d][%d] = %2d  ",i,j,array[i][j]);
        printf("\n");
    }     
}

위의 코드를 실행한 결과는 아래 그림과 같습니다.
여기에 이미지 설명을 삽입하세요.
어떤 사람들은 아래와 같이 2차원 배열을 정의할 때 행 길이와 열 길이를 대괄호 안에 직접 지정하지 않는 이유를 궁금해할 수 있습니다.
여기에 이미지 설명을 삽입하세요.
그러나 이런 방식으로 정의한 후에는 우리가 정의한 배열이 반환 유형과 호환되지 않는다는 경고가 출력됩니다.


위 내용은 C 언어에서 1차원 배열과 2차원 배열을 반환하는 함수에 대한 모든 것입니다!
이 기사의 참조 기사:
C 언어 함수에서 배열을 올바르게 반환하는 방법은 무엇입니까?
2차원 배열/2차원 배열을 함수의 반환값으로 전달

Supongo que te gusta

Origin blog.csdn.net/weixin_42570192/article/details/131203554
Recomendado
Clasificación