프로그래밍

 3198, 1/160 회원가입  로그인  
   capt_0669
   [C 언어]포인터 질문요 2

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2840 [복사]


포인터가 엄청 중요한데서 잘집고 넘어가야 될것같아서 앞으로도 많이 물어보겠습니다

#include <stdio.h>

int main(void)
{
        char* str1 = "Good!";
        char* str2 = "Good!";
        printf("%d, %d \n", str1, str2);
        return 0;
}

원래 이것인데
str1 = "Good!!"
str2 = "Good!"

이렇게하면 주소가 바뀌는데
20의 차이가 나네요

그런데 반대로

str1 = "Good!"
str2 = "Good!!"

이렇게 하면
메모리 크기의 순서가 바뀔줄 알았는데

어떻게 바꾸든
계속 첫번째것이 20차이가 나네요...

왜그런거죠??

아참 그리고 한번
str1, str2둘다 "Good!"어렇게 한다음에
그다음 라인에서 바꿔볼려고 해봤는데

"중요한 것은 문자열이 상수이므로 내용 변경이 불가능하다는 것이다."

라고....

어쨋든

왜 메모리 크기는 20차이가 나나요??

God!
Good!

이렇게해도 20차이에요


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

2번째 질문

#include <stdio.h>

int main(void)
{
        int arr[5];
        int* pArr=arr;

        printf("%d \n", sizeof(arr));                //20출력
        printf("%d \n", sizeof(pArr));                //4출력

        return 0;
}

에서 4가 왜 출력되죠?? 포인터 변수의 크기.. 즉 int가 먹는 메모리의 크기 아닌가요?

근데 double 이나 char 로 바꿔도 4가 나와요...

[5]를 바꿔도 4가 나오고...흠....

포인터 변수의 크기....

int의 크기 아닌가??

double 이나 char로 바꿔보세요. 제 컴 이 이상한가??

  Hit : 5094     Date : 2011/01/06 08:57



    
gamja int* pArr;
sizeof(pArr);

pArr라는 이름을 가진 변수의 크기를 구하시는데요 pArr는 int형 포인터 변수고
그러므로 'int형 포인터 변수'의 크기를 구하게 됩니다. pArr가 가리키는 변수(int형변수)의 크기가 아니죠.

마찬가지로
double* pArr2;
char* pArr3; 하셨을 경우에도 pArr라는 이름을 가진 변수의 크기는 4가 됩니다.
sizeof(pArr), sizeof(pArr2), sizeof(pArr3)는
'포인터 변수 자체'의 크기를 묻는것이지 포인터변수가 '가리키는 변수'의 크기를 묻는게 아니기 때문이죠.

sizeof(*pArr2)는 double형 포인터 변수가 '가리키는 변수의 크기'니까 8byte,
sizeof(*pArr3)는 char형 포인터 변수가 '가리키는 변수의 크기'니까 1byte가 됩니다.
2011/01/08