C언어 - 배열에 쓰이는 대괄호 쌍

최명수 (13576)@Google의 이미지

함수를 공부하면서 매개변수로 배열을 선언할 때 (예를 들어 정수형 배열이라 할 때)
int arr[]이 int *arr과 같은 뜻이라는 것을 알게 되었습니다.

따라서 지금까지 배운 내용들로 보면 배열을 선언하거나 사용할 때
대괄호([]) 안이 비어있는 경우가 2가지라고 판단할 수 있었습니다.
(아까 언급했던 매개변수를 정의할 때의 배열을 나타냄을 강조 / 배열을 정의할 때의 크기의 생략)

그런데 이것들 말고도 배열의 대괄호 안이 비어있는 경우가 있는지 알고 싶어졌습니다.

물론 배워가면서 알게 되겠지만, 처음에 배열에 대해 몰랐을 적에는 많이 헷갈렸던 내용이였기에 미리 끝내버리고 싶습니다.

세벌의 이미지

int arr[]이 int *arr과 같은 뜻이라는 것을 알게 되었습니다.
같은 뜻 인가요?
jachin의 이미지

직접 코딩하면서 확인해보시면 조금 더 재밌지 않을까 생각합니다.

만약 int arr[] 과 int *arr 이 같은 역할을 할 수 있다면...

이를테면 int arr[5]; 를 선언하고, int *brr; /* 언어 유희입니다. */ 를 선언한 후, brr 에 arr[]++ 을 할당해보면 어떨까요? (C99 문법에선 arr[] 식의 표현은 쓰지 않고 대신 arr 이 &arr[0] 과 주소값은 같습니다.)

메모리 주소는 같을 수 있지만, 언어의 규격을 결정할 때, 필요에 따라 연산자와의 관계가 다르기 때문에 선언의 방법이 별도로 생겼다고 생각합니다.

기능을 구현하는데 필요한 명령문, 연산자, 포인터와의 관계에 따라 선언할 방법에 차이가 생기는게 아닐까요?

익명 사용자의 이미지

다들, 질문에서

"함수를 공부하면서 매개변수로 배열을 선언할 때"

이걸 놓치신 듯 싶네요.

jachin의 이미지

매개변수로 선언한 자료형으로 본다면 충분히 같다고 생각할 수 있겠네요.

소스코드를 읽다보면, 두 경우를 구분해서 사용하는 사람과 혼용해서 사용하는 사람들을 보게 되는데, 구분해서 사용하는 사람들은 arr[]을 연속된 메모리 공간을 가리키는 데에 사용하고 *arr은 링크드리스트와 같은 객체타입을 지정하는데 사용하고는 합니다. arr이라고 이름붙여 놨지만 실제론 array는 아닌 셈이죠.

혼용한다 하더라도 언어엔진이 객체의 메모리 범위를 한정해주다보니 큰 문제는 없지만, 코드를 읽으면서도 섬세한 사람들의 감수성을 옅볼 수 있는 것 같습니다.

bushi의 이미지

int * const arr 식으로 매개변수를 주고 받을 곳에서 arr[] 로는 ?

익명 사용자의 이미지

C99부턴 int arr[const]가 있습니다.

bushi의 이미지

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.