C 구조체 멤버를 구조체 포인터 변수를 이용해 초기화 시키려면..

bboy6604의 이미지

#include
#include

struct person{
char name[20];
char phone[20];
};

int main(){
struct person* pMan;
strcpy(pMan->name,"mark");
strcpy(pMan->phone,"343-4343");
printf("name : %s\n", pMan->name);
printf("phone: %s\n", pMan->phone);

return 0;
}

C 언어 기본서로 공부하는 초보입니다. 책에는 구조체 포인터 변수를 통해서 구조체 멤버를 초기화 하는 방법에 대해서는 기술 되어

있지 않네요. 제 나름대로 이렇게 하면 될까 하고 코드를 생각해봤는데 역시나 무반응입니다. 어떤식으로 하면 가능할까요?

라스코니의 이미지

struct person* pMan;

부분을

person* pMan = new person Man;

또는

person Man;
person *pMan = &Man;

으로 해주세요.

bboy6604의 이미지

구조체 변수를 선언해주고 그 주소값을 구조체 포인터 변수에 대입하는 수 밖에 없군요.

답글 감사합니다 ^^

jw8704의 이미지

그러면 어떤 다른 방법이있을것으로 생각하셨나요..

따지는것아닙니다.

bboy6604의 이미지

구조체 포인터 변수 선언과 동시에 일반 변수처럼 초기화 시킬 수 있을지 알았습니다.
일반 구조체 변수를 대입해주는 식말고 바로요 ^^;

breadncup의 이미지

struct person* pMan;
pMan = (struct person *) malloc (sizeof(struct person));

와 같이 초기화를 해주어야 합니다.

struct person* pMan; 이라고 하면, pMan 이라는 변수는 어떤 주소 (address)를 가리킬 수 있는 포인터 변수입니다. 이 변수는 처음에는 아무 주소나 가지게 되지요. 이 변수가 제대로 쓰일 수 있도록 하려면, 이 변수가 제대로 쓸 수 있도록 data가 있는 곳을 할당해 주어야 합니다. malloc은 heap 영역에 있는 한 공간의 따로 떼어서 size로 받은 parameter 만큼 준비시켜서 주소를 리턴하게 되어 있습니다. 즉, pMan = malloc 이 되면, pMan 은 비로소 그 준비된 주소를 받게 되는 것이지요.

만일,

struct person pMan;

라고 되어 있으면, pMan은 stack 영역에 이미 compiler가 준비한 영역을 바로 쓸 수 있게 되는 것입니다. 따라서 malloc 등으로 준비할 필요가 없는 것이지요.

윗분이 쓰신 new 라는 c++ 에서 쓰는 operator는 malloc 과 비슷한 역할을 해줍니다. 만일 c++ compiler가 아닌 c전용 compiler만 쓴다면, new operator는 c compiler가 알 수 없으므로 에러를 리턴할 것입니다.

bboy6604의 이미지

책의 뒷부분에 나오는 내용인데 조금 더 공부하면 약간은 의미를 알수 있는 내용이었군요. 정말 감사합니다^^
미리 조금 봐둬야겠습니다!!

aruee의 이미지

포인터는 그냥 주소값이라고 생각하시면 됩니다. (정확하게는 주소값을 갖는 변수) 따라서 시스템에 따라 그 크기는 달라질 지라도,
모든 data type의 포인터의 크기는 전부 같다고 생각하시면 되고, 모든 포인터는 NULL로 초기화해 주시고 사용하시는 습관을 들이시면 (바로 사용할 주소를 넣는다면 관계없구요) 좋으실듯 하네요.

댓글 달기

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