배열이 함수 인수 C ++ 내부의 포인터로 간주되는 이유는 무엇입니까?

Vivekanand V

배열이 C ++ 함수의 함수 인수에서 포인터로 간주되는 이유는 무엇입니까? 여기에 내 우려를 설명하기위한 몇 가지 코드 스 니펫이 있습니다.

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void test(uint32_t x[3])
{
    cout << "Inside test : "<< sizeof(x) << endl; 
}
int main()
{
    uint32_t n[3];
    cout << "Size of array in bytes : " << sizeof(n) << endl;
    test(n);
    return 0;
}

이것은 내가 얻는 출력입니다.

Size of array in bytes : 12
Inside test : 4

첫 번째 경우에 나는 배열의 실제 크기를 얻지 만, test()호출 될 때 출력은 sizeof(uint32_t *).

이 동작의 이유는 무엇입니까?

모든 도움에 감사드립니다!

SM

이것은 C99 표준 6.3.2.1/3 기타 피연산자-L 값, 배열 및 함수 지정자입니다.

sizeof 연산자 또는 단항 & 연산자의 피연산자이거나 배열을 초기화하는 데 사용되는 문자열 리터럴 인 경우를 제외하고 ''array of type ''유형을 가진 표현식은 ''pointer to 유형의 표현식으로 변환됩니다. type ''은 배열 객체의 초기 요소를 가리키며 lvalue가 아닙니다.

그리고 이것은 C ++ 표준입니다. 배열에서 포인터로 변환.

"NT의 배열"또는 "T의 알 수없는 범위의 배열"유형의 lvalue 또는 rvalue는 "T에 대한 포인터"유형의 rvalue로 변환 될 수 있습니다.

이것은 C ++에서 배열을 포인터로 전달하는 데 필수가 아니며 참조로 붙여 넣을 수 있습니다.

#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void test(uint32_t (&x)[3])
{
    cout << "Inside test : "<< sizeof(x) << endl; 
}
int main()
{
    uint32_t n[3];
    cout << "Size of array in bytes : " << sizeof(n) << endl;
    test(n);
    return 0;
}

산출

Size of array in bytes : 12
Inside test : 12

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

함수의 함수가 포인터로 간주되는 이유는 무엇입니까?

분류에서Dev

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

분류에서Dev

C ++에서 포인터 배열을 포인터 배열로 전달할 수없는 이유는 무엇입니까?

분류에서Dev

배열의 C ++ 포인터 : begin (array) 함수에서 간접적으로 계산 된 const var에 의해 정의 된 배열을 사용할 수없는 이유는 무엇입니까?

분류에서Dev

이 함수가 린터에 의해 생성자로 간주되는 이유는 무엇입니까?

분류에서Dev

포인터에 배열의 주소를 할당 할 수없는 이유는 무엇입니까?

분류에서Dev

함수 내부의 포인터 변경이 함수 외부에서 보이지 않는 이유는 무엇입니까?

분류에서Dev

이 함수를 C ++의 포인터로 다시 작성하는 방법은 무엇입니까?

분류에서Dev

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

분류에서Dev

오류가 배열에 대해 C의 포인터와 호환되지 않는 정수를 계속 표시하는 이유는 무엇입니까?

분류에서Dev

함수 인수 수명이 함수 내의 바인딩 수명과 다른 이유는 무엇입니까?

분류에서Dev

주소가 포인터로 간주되는 이유는 무엇입니까?

분류에서Dev

함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

분류에서Dev

C ++에서 한 클래스의 포인터를 다른 클래스의 포인터로 캐스팅 할 수있는 이유는 무엇입니까?

분류에서Dev

이러한 함수가 함수 포인터로 붕괴되지 않는 이유는 무엇입니까?

분류에서Dev

이 포인터의 값이 간단한 함수 호출에서 변경되는 원인은 무엇입니까?

분류에서Dev

Rust의 내 C strlen ()도 인쇄 내부의 문자열 슬라이스를 계산하는 이유는 무엇입니까? `s` 변수 뒤에 매크로?

분류에서Dev

문자열 배열을 다시 할당 할 수 없지만 문자열 포인터가 C 언어로 될 수있는 이유는 무엇입니까?

분류에서Dev

C 언어에서 "문자열"이 "상수"로 간주되는 이유는 무엇입니까?

분류에서Dev

C의 함수 매개 변수에서 고정 배열 또는 포인터의 차이점은 무엇입니까?

분류에서Dev

함수에서 반환 될 때 벡터 내부의 포인터가 변경되는 이유는 무엇입니까?

분류에서Dev

함수 인수에서 typedef의 상수 크기 배열 주소로 인해 배열이 다른 함수의 형식 매개 변수 인 경우 호환되지 않는 포인터 유형이 발생합니다.

분류에서Dev

이 두 함수 포인터가 모두 C / C ++에서 유효한 이유는 무엇입니까?

분류에서Dev

내 코드의 함수로 인쇄 할 때 포인터를 직접 인쇄하면 다른 결과가 나타나는 이유는 무엇입니까?

분류에서Dev

함수가 포인터를 사용하여 다차원 배열의 요소를 인쇄 할 수없는 이유는 무엇입니까?

분류에서Dev

/ * : * * / 함수 인수 내부의 의미는 무엇입니까?

분류에서Dev

PowerShell 함수의 반환 유형이 항상 배열 인 이유는 무엇입니까?

분류에서Dev

PowerShell 함수의 반환 유형이 항상 배열 인 이유는 무엇입니까?

분류에서Dev

배열의 함수가 '인수'에서 작동하지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    함수의 함수가 포인터로 간주되는 이유는 무엇입니까?

  2. 2

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

  3. 3

    C ++에서 포인터 배열을 포인터 배열로 전달할 수없는 이유는 무엇입니까?

  4. 4

    배열의 C ++ 포인터 : begin (array) 함수에서 간접적으로 계산 된 const var에 의해 정의 된 배열을 사용할 수없는 이유는 무엇입니까?

  5. 5

    이 함수가 린터에 의해 생성자로 간주되는 이유는 무엇입니까?

  6. 6

    포인터에 배열의 주소를 할당 할 수없는 이유는 무엇입니까?

  7. 7

    함수 내부의 포인터 변경이 함수 외부에서 보이지 않는 이유는 무엇입니까?

  8. 8

    이 함수를 C ++의 포인터로 다시 작성하는 방법은 무엇입니까?

  9. 9

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

  10. 10

    오류가 배열에 대해 C의 포인터와 호환되지 않는 정수를 계속 표시하는 이유는 무엇입니까?

  11. 11

    함수 인수 수명이 함수 내의 바인딩 수명과 다른 이유는 무엇입니까?

  12. 12

    주소가 포인터로 간주되는 이유는 무엇입니까?

  13. 13

    함수 포인터를 C의 다른 함수 포인터로 캐스팅하는 것이 안전합니까?

  14. 14

    C ++에서 한 클래스의 포인터를 다른 클래스의 포인터로 캐스팅 할 수있는 이유는 무엇입니까?

  15. 15

    이러한 함수가 함수 포인터로 붕괴되지 않는 이유는 무엇입니까?

  16. 16

    이 포인터의 값이 간단한 함수 호출에서 변경되는 원인은 무엇입니까?

  17. 17

    Rust의 내 C strlen ()도 인쇄 내부의 문자열 슬라이스를 계산하는 이유는 무엇입니까? `s` 변수 뒤에 매크로?

  18. 18

    문자열 배열을 다시 할당 할 수 없지만 문자열 포인터가 C 언어로 될 수있는 이유는 무엇입니까?

  19. 19

    C 언어에서 "문자열"이 "상수"로 간주되는 이유는 무엇입니까?

  20. 20

    C의 함수 매개 변수에서 고정 배열 또는 포인터의 차이점은 무엇입니까?

  21. 21

    함수에서 반환 될 때 벡터 내부의 포인터가 변경되는 이유는 무엇입니까?

  22. 22

    함수 인수에서 typedef의 상수 크기 배열 주소로 인해 배열이 다른 함수의 형식 매개 변수 인 경우 호환되지 않는 포인터 유형이 발생합니다.

  23. 23

    이 두 함수 포인터가 모두 C / C ++에서 유효한 이유는 무엇입니까?

  24. 24

    내 코드의 함수로 인쇄 할 때 포인터를 직접 인쇄하면 다른 결과가 나타나는 이유는 무엇입니까?

  25. 25

    함수가 포인터를 사용하여 다차원 배열의 요소를 인쇄 할 수없는 이유는 무엇입니까?

  26. 26

    / * : * * / 함수 인수 내부의 의미는 무엇입니까?

  27. 27

    PowerShell 함수의 반환 유형이 항상 배열 인 이유는 무엇입니까?

  28. 28

    PowerShell 함수의 반환 유형이 항상 배열 인 이유는 무엇입니까?

  29. 29

    배열의 함수가 '인수'에서 작동하지 않는 이유는 무엇입니까?

뜨겁다태그

보관