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"로 지정하는 건 무슨 의미가 있는 거죠?

  • 2016년 02월 01일에 작성됨

조회수 188


1 답변


좋아요
0
싫어요
채택취소하기

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

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

일종의 편법이지요

  • 2016년 02월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close