포인터 질문입니다.

rc8051의 이미지

첨부 그림 보면 물론 3.14라는 더블형 데이터를 가르키기 때문에
두 포인터에 double이 붙지만
데이터형이 메모리에 자리를 차지하는 걸 표시한다는 정의에 의해 int로 표기하는 게 더 합리적이지 않을까 합니다.

뒤늦게 C공부중인데 고수님들 의견 부탁드립닌다~

File attachments: 
첨부파일 크기
Image icon 1.jpg45.78 KB
mquinas의 이미지

포인터는 대상 객체의 주소값 뿐만 아니라 자료형도 저장하고 있습니다.

double val = 3.14;
double형 변수 val이 메모리 공간 0x1000~0x1007에 저장...
double *ptr1 = &val;
포인터변수 ptr1은 val의 주소값을 지니고 있음 (0x1000) 근데 이때 포인터 변수 *ptr는 val의 더불어 참조하는 대상의 자료형 정보도 알 수 있음
여기서 val의 자료형이 double형이기때문에 *ptr1이 가리키는 변수의 자료형인 double로 선언.
만약에 int *ptr1 = &val;로 하면 포인터 변수 ptr이 참조하는 대상의 자료형이 int형이라는 얘기
double **ptr2 = &ptr1;
마찬가지겠죠 더블포인터... ptr2는 ptr1의 주소값을 가리키고 ptr1은 그런데 double형으로 선언되어 있으니...

결국 ptr2도 double형으로 선언 되어야합니다.

그런데 포인터의 주소값은 double형이 아닌 int형 4바이트로 저장되어 있습니다. 포인터 변수도 메모리 어느 공간에 올라가 있으니깐요.

근데 그 메모리 공간에 올라갈때 int형으로 올라갑니다.

double *ptr1 = &val; 에서 ptr1의 메모리 주소는 int형으로 저장되어 있는겁니다.

단지 포인터 변수 *ptr1이 참조하는 메모리에 있는 자료형이 double형이라는것입니다.

이문장을 아래와 같이 바꾸는것은 포인터의 개념을 좀 더 차근차근히 이해하시면 아래 문장이 왜 틀렸는지 알 수 있으실 겁니다.

double val = 3.14;
int *ptr1 = &val;
int **ptr2 = &ptr1;

kgcrom의 이미지

#include <stdio.h>
 
int main()
{
    char a[4] = {'1', '2', '3', '4'};
 
    int *p;
 
    p = (int*)a;
 
    printf("point p :%d\n", *p);
    return 0;
}

'1' = 0011 0001 '2' = 0011 0010 '3' = 0011 0011 '4' = 0011 0100

출력되는건 875770417 이에요 0011 0100 0011 0011 0011 0010 0011 0001

포인터의 자료형을 가져올 범위라고 생각하시면 편할것같습니다.

int 형포인터는 가리키는 주소로부터 4 byte를 가져오고, char 형 포인터는 가리키는 주소로부터 1byte를 가져오고 이런식으로요.

흘러가고있는 지금 이 시간에 충실하자.

댓글 달기

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