좋은질문

C언어 포인터 문제 몇가지만 질문 드릴게요

JustineBaek 2014. 9. 13. 00:31

 

 

 

int a; (1000번지라고 가정)
int b=3; (2000번지라고 가정)
1번 문제 *a=*b;
2번 문제 &a=&b;
3번 문제 *a=b;
4번 문제 a=*b;
5번 문제 a=&b;
6번 문제 &a=b;
7번 문제 *a=&b;
8번 문제 &a=*b;

 


int *a; (1000번지라고 가정)
int b=3; (2000번지라고 가정)
9번 문제 *a=*b; 
10번 문제 &a=&b;

11번 문제 *a=b;
12번 문제 a=*b;
13번 문제 a=&b;
14번 문제 &a=b;
15번 문제 *a=&b;
16번 문제 &a=*b;

 

대부분이 말이 안되는건 알지만 그 의미들을 명확히 이해하고 싶습니다.

 

ex) 1번 문제 *a=*b; ex) a가 가르키는 곳은 b가 가르키는곳 즉 3번지의 값을 가르킴 하지만 실제로는 a가 가르키는 곳은 없고, 3번지의 값또한 분명치 않기에 에러! 이런식으로 답변 부탁드립니다.

 

 

 

 

1. 포인터 변수 없이는 모두 문제가 되네요..^^;  포인터 변수가 있어야 문제가 성립하겠습니다.

 


2. 첫번째 문제(포인터 변수 2개를 만들고, 변수의 주소를 대입합니다.)

 

int a; (1000번지라고 가정)
int b=3; (2000번지라고 가정)

 

int* pA = &a;   // pA라는 포인터 변수에 a변수의 주소 1000번지 저장 (현재값: 0)
int* pB = &b;   // pB라는 포인터 변수에 b변수의 주소 2000번지 저장 (현재값: 3)


                         시작 : a = 0, b = 3 , pA = 1000, pB = 2000
---------------------------------------------------------------------------

1번 문제 *a=*b;      :  a,b는 포인터가 아니라 *연산 불가 ==> *pA = *pB;
                         결과 : a = 3

 

2번 문제 &a=&b;     :  a의 주소 상수에 다른 주소 저장 불가 ==> pA = &b;
                         결과 : pA = 2000
 
3번 문제 *a=b;       :  a는 포인터가 아니라 *연산을 통한 할당 불가 ==> *pA = b;
                         결과 : a = 3

4번 문제 a=*b;       :  b는 포인터가 아니라 *연산을 통한 읽기 불가 ==> a = *pB

                         결과 : a = 3
 
5번 문제 a=&b;      :  a는 포인터가 아니라 주소저장 불가 ==> pA = &b;
                         결과 : pA = 2000
 
6번 문제 &a=b;      :  a의 주소 상수에 값을 대입 불가 ==> *pA = b;
                         결과 : a = 3
 
7번 문제 *a=&b;     : a는 포인터가 아니라 *연산 및 주소저장 불가  
                         ==> pA = &b; 또는 pA = pB;
                         결과 : pA = 2000
 
8번 문제 &a=*b;      : a의 주소 상수에 할당 불가,b는 포인터가 아니라 *연산 불가 
                         ==> a = *pB; 
                         결과 : a = 3

-------------------------------------------------------------------------
                         종료 : a = 3, b = 3, pA = 2000, pB = 2000 

 


3. 두번째 문제는 경우의 수가 거의 유사하여 생략합니다.

 

4. 예제코드를 기술합니다.

     int a;
     int b = 3;

 

     int* pA = &a;
     int* pB = &b;

 

     *pA = *pB;
     printf("1) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     pA = pB;
     printf("2) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     *pA = b;
     printf("3) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     a = *pB;
     printf("4) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     pA = &b;
     printf("5) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     *pA = b;
     printf("6) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     pA = &b;
     printf("7) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

     *pA = b;
     printf("8) a=%d, b=%d, pA=%d, pB=%d \n", a, b, pA, pB);

 

 

도움이 되시길 바랍니다.

감사합니다.

 

 

 

written by

  

legend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C과외/C#과외/VB과외 프로그래밍 과외.서울인천경기-방문강의.기타전국-화상강의.제대로 체계적으로 배우고싶은분들.15년경력 프리랜서.삼성/포스코/한진 등.

서울,인천,경기,분당,일산,과천,산본,부천,부평,평촌,안산,안양,광명,용인,시흥,성남,수원,평택,오산,화성,동탄,천안,아산,

c#프로그래밍1:1과외, 15년 이상 프로젝트 경력의 프리랜서 직접 강의,

c#프로그래밍 과외, c#프로그래밍교육, IT·컴퓨터·컴퓨터과외비·프로그래밍과외, c# 강좌, c# 프로그래밍,

데이터베이스, 데이터베이스 프로그래밍, db, DB, 과외비,컴퓨터1:1,컴퓨터개인지도,컴퓨터실무과외,컴퓨터과외,컴퓨터1:1과외,

서울,인천,경기,부천,안산,분당,일산,천안,과천,산본,안양,광명,평촌,수원,평택,오산,용인,부평,시흥,성남,화성,동탄

광주,부산,대구,대전,마산,창원,울산,전주,군산,원주,강릉,충청남도,충청북도,강원도,경상남도,경상북도,전라남도,전라북도,제주도