1. char *p = "ABCDEFG"의 형태일 때 각각의 차이점은 무엇인가?

① *( p+3 )

② ( *p ) +3

③ *p + 3

④ p + 3


< 1번 소스코드 >



< 실행 결과 >









< 설명 >


*p 는 "ABCDEFG" 의 주소값이다.

내가 위의 보기에서 1, 2, 3은 "ABCDEFG"의 주소값을 보니 5fbff808가 나왔는데,

여기에서 3을 더하면 5fbff80b가 되어 "D"가 출력되게 된다.

반면, 4번은 그냥 p에 3을 더했기 때문에 이상한 값이 나온다.



2. char *p = {"ABCDE","KBS","XYZ"}; 일 때 다음 명령어들의 차이점은 무엇인가?

① p++

② *p++

③ (*p)++



< 소스 코드 >


1번 소스코드 : 


2번 소스코드 :





3번 소스코드 : 



-> 1, 2 출력 결과      

 -> 3 출력 결과



< 설명 >



2번 문제를 설명하기 위하여 한가지 코드를 짜보았다.

위의 문제의 1, 2, 3번의 차이는 *연산자와 ++연산자의 우선순위 차이이다.

32비트 운영 체제의 경우에 주소가 0x4씩 커진다.


*p++ = p가 가진 주소가 0x10인 경우, 0x14로 바뀐다.

(*p)++ = p가 가진 주소가 0x10인 경우, 0x10에 1이라는 값을 가지는 경우, 주소 0x10의 값이 2로 바뀐다.

*(p++) = *p++


이런 차이가 있다.




3. 다음 프로그램의 출력 결과를 예측해보아라.



나는 *c 라는 것은 주소값을 가리켜야 하는데 가르켜야 할 주소값이 없으니 입력을 받고 출력을 하지 못할 것 같다고 생각했다.


< 결과 >



내 생각이 맞았다. 난 Xcode를 사용해서 다른데에서는 어떻게 반응할지는 모르겠지만, 에러가 났다.

.

.

코드를 수정하여 이 코드가 돌아갈 수 있도록 해 보았다.




*c 라는 포인트 배열이 input 이라는 배열을 가리키게 하여 코드가 실행될 수 있도록 하였다.

▼▼▼ 출력 결과 실행이 잘 된다  ▼▼▼





4. char * p[] = {"ABC","XY","BJW","JMLEE"}; 일 때 다음 각각의 포인터의 연산 결과를 구하여라.

① *p

② *p([2] + 1)

③ *(*(p + 3) + 2)



1번만 실행할 경우 A가 출력 되지만, 2~3번은 에러가 나며 출력되지 않는다.

내가 예상한 결과는 2번의 경우 p[2]는 "BJW" 이고 +1이니 J를 예상하였고,

3번의 경우 *(p+3)은 p[3]이고 여기에 +2이니 L을 예상하였는데 에러가 나서 당황하였다.




내가 포인터를 잘못 이해하고 있는건지 모르겠다.

▶ 제가 만약 잘못하고 있는게 있으면 댓글로 달아주면 감사하겠습니다.



5. 입력받은 문자열 거꾸로 출력하는 프로그램을 만들어라.




< 코드 설명 >


위의 코드는  p 포인터 배열을 만든 뒤, Input을 받고, p[i]을 NULL 전까지 주소값를 증가시켰다.

마지막으로 for문으로 NULL 전부터 0까지 출력하게 하여 거꾸로 출력하는 프로그램을 만들어 보았다.



< 출력 결과 >






6. a가 배열이고, b가 문자열의 포인터일 때 배열 a에 b 문자열을 복사하는 함수를 만들어라.





< 코드 설명 >


이 코드는 a 배열과 b 포인터 배열을 선언하여 a를 입력받고 strcpy를 사용하여 b에 a를 저장하여 Output으로 b를 출력하였다.

결과는 아래와 같이 제대로 되었다.





7. char c[]="ABCDE" 일 때, c++과 같은 명령을 사용할 수 없는 이유를 구하여라.


c[]는 일반 배열이기 때문에 문자여서 c++를 하면 오류가 나게된다.

하지만 char *c[]를 하여 포인트 배열로 만들면 주소값의 형태를 띄게 되어 c++를 하면 주소값+1이 되어,

A의 주소값 +1 = B가 되어 BCDE가 출력되게 된다.

'Programming > C' 카테고리의 다른 글

함수 포인터  (0) 2015.08.27
[ Project ] Wild!  (0) 2015.08.27
[ Project ] Stack_Linked List  (0) 2015.08.27
연결 리스트 ( Linked List )  (0) 2015.08.27
구조체 ( Struct )  (0) 2015.08.27