포인터를 사용하지 않고 참조로 함수에 배열을 전달할 수있는 이유

PiyushM

배열 a의 첫 번째 요소 주소로 배열 q [] [4]를 초기화 할 때 다음 코드가 작동하지 않는 것이 테스트되고 분명합니다.

    int main()
{
    int a[3][4] =
    {
        1, 2, 3, 4,
        5, 6, 7, 8,
        9, 0, 1, 6
    } ;
    int q[ ][4]=a;
    int i,j;
    for(i=0; i<3; i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d",q[i][j]);
        }

    }
    return 0;
}

그러나 함수를 사용하여 동일한 논리를 구현하면 (즉, 배열 a의 주소를 함수의 형식 매개 변수 q [] [4]에 전달) 제대로 작동합니다.

main( )
{
    int a[3][4] =
    {
        1, 2, 3, 4,
        5, 6, 7, 8,
        9, 0, 1, 6
    } ;

    print ( a, 3, 4 ) ;
}

    print ( int q[ ][4], int row, int col )
    {
        int i, j ;
        for ( i = 0 ; i < row ; i++ )
        {
            for ( j = 0 ; j < col ; j++ )
                printf ( "%d ", q[i][j] ) ;
            printf ( "\n" ) ;
        }
        printf ( "\n" ) ;
    }

어떻게 가능합니까?

MikeCAT

int q[ ][4]in 함수 인수는 int (*q)[4](의 4 요소 배열에 대한 포인터 )와 동일합니다 int. N1570 6.7.6.3 함수 선언자 (프로토 타입 포함), 단락 7은 다음과 같이 말합니다.

매개 변수의``형 배열 ''선언은``형식에 대한 정규화 된 포인터 ''로 조정되어야합니다. 여기서 유형 한정자는 (있는 경우) 배열 유형 파생의 [및] 내에 지정된 것입니다.

또한 a함수 인수에 사용되는 경우 배열의 첫 번째 요소를 가리키는 포인터로 변환됩니다 int. N1570 6.3.2.1 L 값, 배열 및 함수 지정자. 단락 3은 말한다 :

sizeof 연산자, _Alignof 연산자 또는 단항 & 연산자의 피연산자이거나 배열을 초기화하는 데 사용되는 문자열 리터럴 인 경우를 제외하고 ''array of type ''유형이있는 표현식은 다음과 같은 표현식으로 변환됩니다. 배열 객체의 초기 요소를 가리키고 lvalue가 아닌 ''형식에 대한 포인터 ''를 입력합니다.

따라서 함수 print()는 배열의 요소가 어디에 있는지 알고 작업 할 수 있습니다.

그건 그렇고, 함수 를 사용하는 줄 앞에 함수 (또는 함수가 선언 된 헤더 포함)를 선언하는 것을 잊지 마십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

가변 배열 참조도받는 함수에 가변 배열 참조를 전달할 때 & mut이 지정되지 않은 이유는 무엇입니까?

분류에서Dev

포인터를 매개 변수로 요구하는 함수 프로토 타입을 기반으로 사전 정의하지 않고 변수에 대한 포인터를 전달하는 방법이 있습니까?

분류에서Dev

순수 참조 인수를 std :: thread에 전달할 수 없지만 원시 포인터를 전달할 수있는 이유는 무엇입니까?

분류에서Dev

Java 인수로 전달하지 않고 메소드에서 배열을 참조하는 방법

분류에서Dev

C-함수의 포인터 인수에 배열 참조를 전달하는 데 문제가 있습니다.

분류에서Dev

typedef 고정 길이 배열에 대한 포인터를 사용하여 memcpy를 수행 할 때 역 참조가 필요합니까? 그 이유는 무엇?

분류에서Dev

참조에 의한 전달을 포인터에 의한 전달이라고도 할 수 있습니까?

분류에서Dev

포인터를 참조로 함수에 전달할 때 앰퍼샌드 및 별표를 사용하는 방법

분류에서Dev

ng-repeat를 사용하고 HTML에서 함수를 호출 할 때 JSON 배열 값이 HTML 양식으로 전달되지 않습니다.

분류에서Dev

C에서 포인터를 사용하지 않고 함수를 통해 2D 배열을 전달하는 방법

분류에서Dev

고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

분류에서Dev

참조로 배열을 전달할 때 변수가 정의되지 않았다는 컴파일러 오류가 발생하는 이유는 무엇입니까?

분류에서Dev

참조로 2D 배열을 전달하는 경우 컴파일러가 배열 크기를 계산할 수없는 이유

분류에서Dev

JavaScript에서 전체 배열을 전달하지 않고 배열 요소를 함수에 전달하는 방법이 있습니까?

분류에서Dev

변수를 정의하지 않고 배열을 함수 인수로 전달

분류에서Dev

함수 배열을 다른 함수에 인수로 전달하고 이후 함수에서 이러한 함수를 호출하는 방법

분류에서Dev

Swift에서 inout 함수를 참조하여 const 값을 전달할 수없는 이유는 무엇입니까?

분류에서Dev

JNI 함수에서 나는 배열이 수정되지 않습니다 Java 코드로부터 전달 된 현재 위치에서 배열을 변경할 때

분류에서Dev

C ++ : 벡터를 사용하지 않고 함수에 문자열 배열 전달

분류에서Dev

고정 포인터를 사용하여 관리되지 않는 코드에 큰 데이터 구조 전달

분류에서Dev

Pouchdb에서 JSON 이름을 참조하는 데 사용될 함수에서 배열 값을 어떻게 전달할 수 있습니까?

분류에서Dev

C를 사용하여 데이터베이스에서 구조의 포인터 변수 배열에 문자열을 할당하고 읽는 방법

분류에서Dev

eval ()을 사용하지 않고 변수 이름을 사용하여 객체를 참조 할 수 있습니까?

분류에서Dev

Delaration 전에 구조 유형의 포인터를 사용할 수있는 이유

분류에서Dev

인수를 취하지 않고 void를 반환하는 함수 포인터 유형을 인수를 취하고 값을 반환하는 함수와 함께 사용할 수 있습니까?

분류에서Dev

함수에서 문자열을 인수로 전달할 때 열 이름을 유지하는 방법

분류에서Dev

포인터의 포인터를 매개 변수로 사용하여 함수를 선언하는 배열의 포인터를받을 수없는 이유

분류에서Dev

함수에 전달되는 배열의 요소 인 포인터를 역 참조하는 방법

분류에서Dev

C ++ : const 멤버 함수에서 const가 아닌 포인터 매개 변수를 사용하는 외부 함수로 포인터 값 멤버 변수를 전달할 수있는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    가변 배열 참조도받는 함수에 가변 배열 참조를 전달할 때 & mut이 지정되지 않은 이유는 무엇입니까?

  2. 2

    포인터를 매개 변수로 요구하는 함수 프로토 타입을 기반으로 사전 정의하지 않고 변수에 대한 포인터를 전달하는 방법이 있습니까?

  3. 3

    순수 참조 인수를 std :: thread에 전달할 수 없지만 원시 포인터를 전달할 수있는 이유는 무엇입니까?

  4. 4

    Java 인수로 전달하지 않고 메소드에서 배열을 참조하는 방법

  5. 5

    C-함수의 포인터 인수에 배열 참조를 전달하는 데 문제가 있습니다.

  6. 6

    typedef 고정 길이 배열에 대한 포인터를 사용하여 memcpy를 수행 할 때 역 참조가 필요합니까? 그 이유는 무엇?

  7. 7

    참조에 의한 전달을 포인터에 의한 전달이라고도 할 수 있습니까?

  8. 8

    포인터를 참조로 함수에 전달할 때 앰퍼샌드 및 별표를 사용하는 방법

  9. 9

    ng-repeat를 사용하고 HTML에서 함수를 호출 할 때 JSON 배열 값이 HTML 양식으로 전달되지 않습니다.

  10. 10

    C에서 포인터를 사용하지 않고 함수를 통해 2D 배열을 전달하는 방법

  11. 11

    고정 크기 배열에 대한 포인터의 주소를 C의 포인터에 대한 포인터를 예상하는 함수에 전달할 수없는 이유는 무엇입니까?

  12. 12

    참조로 배열을 전달할 때 변수가 정의되지 않았다는 컴파일러 오류가 발생하는 이유는 무엇입니까?

  13. 13

    참조로 2D 배열을 전달하는 경우 컴파일러가 배열 크기를 계산할 수없는 이유

  14. 14

    JavaScript에서 전체 배열을 전달하지 않고 배열 요소를 함수에 전달하는 방법이 있습니까?

  15. 15

    변수를 정의하지 않고 배열을 함수 인수로 전달

  16. 16

    함수 배열을 다른 함수에 인수로 전달하고 이후 함수에서 이러한 함수를 호출하는 방법

  17. 17

    Swift에서 inout 함수를 참조하여 const 값을 전달할 수없는 이유는 무엇입니까?

  18. 18

    JNI 함수에서 나는 배열이 수정되지 않습니다 Java 코드로부터 전달 된 현재 위치에서 배열을 변경할 때

  19. 19

    C ++ : 벡터를 사용하지 않고 함수에 문자열 배열 전달

  20. 20

    고정 포인터를 사용하여 관리되지 않는 코드에 큰 데이터 구조 전달

  21. 21

    Pouchdb에서 JSON 이름을 참조하는 데 사용될 함수에서 배열 값을 어떻게 전달할 수 있습니까?

  22. 22

    C를 사용하여 데이터베이스에서 구조의 포인터 변수 배열에 문자열을 할당하고 읽는 방법

  23. 23

    eval ()을 사용하지 않고 변수 이름을 사용하여 객체를 참조 할 수 있습니까?

  24. 24

    Delaration 전에 구조 유형의 포인터를 사용할 수있는 이유

  25. 25

    인수를 취하지 않고 void를 반환하는 함수 포인터 유형을 인수를 취하고 값을 반환하는 함수와 함께 사용할 수 있습니까?

  26. 26

    함수에서 문자열을 인수로 전달할 때 열 이름을 유지하는 방법

  27. 27

    포인터의 포인터를 매개 변수로 사용하여 함수를 선언하는 배열의 포인터를받을 수없는 이유

  28. 28

    함수에 전달되는 배열의 요소 인 포인터를 역 참조하는 방법

  29. 29

    C ++ : const 멤버 함수에서 const가 아닌 포인터 매개 변수를 사용하는 외부 함수로 포인터 값 멤버 변수를 전달할 수있는 이유는 무엇입니까?

뜨겁다태그

보관