#include <stdio.h>
int main() {
char* str[2];
str[0] = "hello!";
str[1] = "jungler";
printf("1. %s\n", str[0] + 1);
printf("2. %s\n", (str + 1)[0] + 2);
return 0;
}
답: 1. ello! 2. ngler
str[0]+1
의 출력값 의 출력값쪼개면
hello!
ello!
출력str[1] 를 출력하면? "jungler"
(str+1)[0]+2
의 출력값마찬가지로 쪼개면
[1] str
: str이라는 포인터 배열의 첫번째 요소(hello!
)의 주소를 계산한다. (pointer이고 주소값 출력) -> 여기 틀림
*str
을 붙여야hello!
가 출력
[2] str+1
: str이라는 포인터 배열의 두번째 요소(jungler
)의 주소를 계산한다.(pointer이고 주소값 출력)
str
str+1
의 각 출력 결과
- following question 1 - 그럼
str+1
출력 결과와str[1]
출력 결과가 같은가? -> 다름
다른 이유는- fq of fq1 - 그럼 배열의 두번째 요소의 주소를 계산하는 맞는 방법은? 예상-&str[1] -> 맞음
[3] (str+1)
: 2의 결과(jungler
)의 주소를 계산하고 괄호를 벗긴다. 즉, 2번과 출력값이 같다.(주소값 출력)
괄호와 *의 차이는 뭔가? 괄호는 단순히 괄호 안을 먼저 계산하라는 의미. 따라서, (str+1)이 다른 항들 없이 단독으로 괄호만 쓴거라면 의미가 없다.
- following quistion - 그럼 괄호가 무의미해 보이는데 유의미한 경우는 뭐가 있나?
콜백함수를 사용하고 싶을 때 function pointer를 사용할 수 있다. 아래 예제 참고.
[4] (str+1)[0] : 3의 결과(j가르키는 포인터)에 0번 인덱스.(값 출력) 즉, str[1]의[0]. string인데 인덱스
4번에서는 괄호가 유의미 하다. 괄호가 없으면 1의[0]번 인덱스를 찾으려 해서 에러가 발생하기 때문이다.
[5] (str+1)[0]+2 : jungler
에서 0번 인덱스, n를 가르키는 배열포인터이므로,ngler
출력