c에서 char* a 의 해석 방법..?

익명 사용자의 이미지

안녕하세요. 유령 키다군입니다..^^;

c로 만든 소스를 살펴보고 있는중에
자료형(그러니깐..char,int 뭐이런걸 통틀어서 이렇게 부르는거 맞나요?)
바로 다음에 *표시가 붙고 변수가 붙은걸 보았는데요..
(char* a 와같이)

이것은 어떻게 해석햐야 하는건가요..?
(제가 보고있는 책애선 보지 못한 형식이라서)

혹시 char *a와 같은 의미인지..?

조언 부탁드리겠습니다..

그럼..이만.

익명 사용자의 이미지

예..그 자료형의 포인터형이라는 겁니다.

typedef struct {
int a;
int b;
} aaa

이런게 있을때.

aaa * c;

이렇게 선언하면

c 는 aaa 자료형의 포인터형이 되는겁니다..

익명 사용자의 이미지

안녕하세요.. 유령 키다군입니다..^^;

임동현 wrote..
예..그 자료형의 포인터형이라는 겁니다.

typedef struct {
int a;
int b;
} aaa

이런게 있을때.

aaa * c;

이렇게 선언하면

c 는 aaa 자료형의 포인터형이 되는겁니다..

벌써 답변이..@.@

먼저 답변주신거 감사합니다.

그런데.우웅.. 잘 이해가 안되네요..긁적긁적..
(바보키다군..-_-;)

죄송하지만 조금 더 자세한 답변을 부탁드리겠습니다..

1. c 는 aaa 자료형의 포인터형이 되는겁니다..

- 이거요 달리 말하면 c라는 넘이 aaa라는 자료형을 가르키는 포인터란 말인
가요..?

2. 주로 어떤식으로 사용되어지며 이것을 사용하면 어떤 이점이 있는지
알고싶습니다..

우웅.. 머리나쁜 키다군은 답변을 기다리며 이만. 물러납니다..

익명 사용자의 이미지

같은 걸로 알고 있는데요 ㅡ.ㅡ?
정확하지는 않으니..

c newsgroup 에 가시면 c 표준도 읽어보시는
열성파/고수 들이 있으니 거기에 질문하는 것도 좋을듯 하네요 ..

익명 사용자의 이미지

흠...주로..함수의 아규먼트로 자주 쓰이죠.

그러니까.실제 변수를 넘겨주는것보다..

포인터변수를 넘겨주면.... 오버헤드는 포인터 변수 자체 이니까.

효율적이겠죠?..

아니라면..직접 함수에서 값을 고쳐줘야 할때.

필요하겠죠.

익명 사용자의 이미지

안녕하세요.. 유령 키다군입니다...^^;

덕분에 좋은 지식을 얻을수 있어서 감사드립니다.

더불어 iron 님께도 감사를..

그럼. 안녕히 계세요..

익명 사용자의 이미지

char* a ; == char *a ;
== char * a ;

익명 사용자의 이미지

char* a 나 char *a 나 char*a 나 모두 같습니다.
저는 char* a 를 선호하는 데, 저는 a 를 객체로 간주하고,
그 앞에 있는 선언들을 그 객체의 계층 ( class ) 로 간주하기 때문입니다.

그래서 char* a 면 a 객체의 계층은 char* 이라고 생각하는 겁니다.

다른 예로 struct _A** a 에서 객체 a 의 계층은 struct _A** 이라고
보는 것 입니다.

제 허접 강좌에는 이런 걸 위에 설명드린 것보다 조금 자세히 하고 있습니다.
시간이 정말 많이 남을 때 보세요. ㅡㅡ;

직접 가는 주소는 가변적이므로 다음 순서에 따라 들어가보시면 됩니다.

http//www.netian.com/~heesc
Korean
프로그래밍
강좌

익명 사용자의 이미지

안녕하세요.. 유령 키다군입니다..^^;

헉..그럼 결국은 코딩스타일에서 오는 차이인건가요..-_-;;

한 소스 내에서

char *a
char* a

뭐.. 이런게 뒤섞여 나와서 뭔가 좀 다른줄 알았거든요..-_-;;

여튼 뭔가를 알게되었다는것은 기분이 좋네요..^^;

리플 달아주신분들 감사드립니다..

그럼 이만..

익명 사용자의 이미지

다른 분들이 말씀하신것 처럼
char* a 나 char *a는 같은 거죠..
그런데 이게 왜 같은 지를 설명해 드릴려구요..

음 c에서 토큰을 처리할때,
혼란을 피하기 위해서 인접되는 식별자, 예약어, 상수 다음에 오는
식별자는 공백으로 구분을 합니다.
그리고 좌에서 우로 가면서 조합 가능한 가장 최대 길이의
토큰을 만듭니다.

이 규칙에 의하면
char는 예약어 이고 *는 연산자
a는 식별자가 되는 거죠..
그래서 이것들 컴파일러 입장에서 보면,
3개의 토큰이고 이 사이에 공백이 들어 가든
말든 정확하게 의미가 전달 됩니다.

아래의 예제는
제가 책에서 본것인데, 한번 틀린것을 골라내보세요

b->x
b --> 0
b --x
b ---x
a +++++b

그럼 좋은 주말 보내세요...

익명 사용자의 이미지

하이텔 소프트웨어 동호회의 강좌란에 있는 포인터 부분중에 일부입니다.
(허락없이 손현곤님의 강좌를 배포하게 되는군요. --;)

------------------------------------------------------------------------

이 글의 출처는 서울대학병원의 레지던트로 계시는 변성완님이 개발하신
B구문법에 관한 글입니다. 옮긴이가 나름대로 쉽게 풀어 쓸 것입니다.

=====================================
# B 구문법과 C 구문법간의 변환 규칙
=====================================

---------------------------------------------------------------------
* 규칙 1 선언에서 '*'는 괄호에 의해 제한을 받지 않는 한 앞뒤 어느 쪽
에나 자유롭게 붙일 수 있다.
---------------------------------------------------------------------

'int *px; <--> int* px;(B구문법)'과 같이 상호 변환 가능하다는 말이다.
이 규칙에 의해 파생되는 B 구문법의 관련 사항을 하나 약속하자. 'int*형'
이라고 표현하면 이는 'int형을 가리키는 포인터형'을 의미하는 것으로 약
속한다. 일반적으로 말하면 'T*형'은 'T형을 가리키는 포인터형'이라고 할
수 있겠다. 사실 이것은 C구문법으로 보아도 위배되는 점이 없고 실제로 많
은 C언어 교재에서 사용하고 있는 약속이므로 별다른 거부감을느낄 수 없
으리라 생각한다. 그러면 B 구문법이 어떻게 이해에 도움이 되는지 알아보
자.

C 구문법 'int *px;'에서는 '*px가 int형이니깐 px는 int형을 가리키는 포
인터 변수이다'라고 간접적인 이해를 하는 반면에 B 구문법에서는 'int* px
;'처럼 하여 'px는 int*형 변수이다'라고 직접적인 이해를 한다. 'int x;'
가 'X는 int형 변수이다'를 의미하는 것과 마찬가지로 'int* px;'가 'px는
int*형 변수이다'라는 의미로 해석하는 것이다.

------------------------------------------------------------------------
이 외에도 규칙 2와 규칙 3이 있는데 지면관계로 (흐~ 그냥 질문과는 조금
다른 방향이므로...) 생략을 했습니다.
참고로 본 자료는 하이텔 소프트웨어 동호회 통합강좌란의 손현곤님이 올리신
내용의 일부임을 밝혀드립니다.

sun1226의 이미지

포인터는 메모리를 가르키는 변수입니다.
그렇게만 생각을 한다면 타입이 중요하지 않을거라 생각드시겠지만
아닙니다...타입에따라 포인터타입도 케스팅되야 합니다..
int 는 int *a;
char는 char *a;형식으로요...
역시 구조체도 역시 구조체*a로 해야 합니다..
그리고 char *a나 char * a나 마찬가지구요

Risty의 이미지

char* a, b와 같이 선언하면 눈으로 보기에는 캐릭터 포인터 변수 두 개를 선언하는 것 같지만, 실제로는 a만 포인터 변수이고 b는 그냥 캐릭터 변수입니다. 상당히 헷갈리기 쉬울 것 같군요.

nahanjang의 이미지

변수 선언시에는 형(char, int...) 보다는 동생(변수)에게 별점을 주는게 좋더라는..
그래야 동생이 여럿이더라도 별점을 가진놈과 안가진놈이 구분이 명확하더라는..

라키시스의 이미지

The C programming language 에서 declaration 에 관련된 grammar 만 발췌해 보았습니다. 참고가 되시길 바랍니다.

_opt 는 있어도 그만 없어도 그만 이라는 뜻입니다.

---

type-qualifier: one of
   const volatile

storage-class-specifier: one of
   auto register static extern typedef

type-specifier: one of
   void char short int long float double signed unsigned struct-or-union-specifier enum-specifier typedef-name

declaration :
   declaration-specifiers init-declarator-list_opt;

declaration-specifiers:
   storage-class-specifier declaration-specifiers_opt
   type-specifier declaration-specifiers_opt
   type-qualifier declaration-specifiers_opt

init-declarator-list:
   init-declarator
   init-declarator-list , init-declarator

init-declarator:
   declarator
   declarator = initializer

declarator:
   pointer_opt direct-declarator

direct-declarator:
   identifier
   ( declarator )
   direct-declarator [ constant-expression_opt ]
   direct-declarator ( parameter-type-list )
   direct-declarator ( identifier-list_opt )

pointer:
   * type-qualifier-list_opt
   * type-qualifier-list_opt pointer

type-qualifier-list:
   type-qualifier
   type-qualifier-list type-qualifier
marunarea의 이미지

어서 므흣한걸 올려놔서...- _-;; 회사에서 보고 있었는데..
이런건 좀 딴데 숨겨주면 않되겠니? ㅋㅋ

익명사용자의 이미지

그런데.우웅.. 잘 이해가 안되네요..긁적긁적..
(바보키다군..-_-;)

난 왜 이 부분에서 피식 웃게 되는지 모르겠습니다.
(바보키다군..-_-;) 옆에 사람이 자판으로 치는건가요??

혹 아니면 키다님은 인격체가 둘인가요?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.