C/C++ 컴파일러는 왜 a[1]을 인자로 받는 함수에 b[4]를 넣어도 에러를 안 내나요?

소스코드

#include<iostream>
using namespace std;
int dis(char a[1])
{
    int length = strlen(a);
    char c = a[2];
    return length;
}
int main()
{
    char b[4] = "abc";
    int c = dis(b);
    cout << c;
    return 0;
}

여기서 int dis(char a[1])에 1은 아무런 일을 안 해주는 것 같아서 질문드립니다.

함수를 실제로 쓸 때는 배열 길이가 4여도 상관없고 5여도 상관없는 것 같은데 그럼 컴파일러 입장에서 "1"로 지정하는 건 무슨 의미가 있는 거죠?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    int dis(char a[1])같이 쓰는 코드는 배열을 전달하는 것처럼 보이지만 사실은 배열을 전달하는 게 아니고 포인터가 가리키는 첫 번째 원소의 주소를 전달합니다.

    이때 포인터로는 "배열이 얼마나 긴지"에 대한 정보를 알 수 없기 때문에 []안의 값은 무시됩니다.

    일종의 편법이지요

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.