다시 오신 걸 환영해요
점 연산은 이해하고 이해하기 어려운 개념이기
때문에 이 개념을 잘 보여주는
마지막 예제를 살펴볼게요.
이 예제를 이해하신다면 점 연산에는
아무 문제가 없을 거예요
첫 번째 예제는 정수 값을 포인터에
추가한 효과예요
그래서 덧셈과 포인터 연산을 하면 주소와
관련해서 어떻게 작동하는지 알 수 있죠
이 프로그램에서 제가 할 일은 문자열을 생성하는 겁니다
문자열이라 부르는 문자열이죠
그런 다음 p라는 캐릭터 포인터를 만들어요
문자열의 전체 길이를 검토하고 있어요 여러
개죠 전체 배열을 살펴볼 거예요
루프의 강도와 길이는 멀티사이즈와 멀티라인이네요
그런 다음 배열 안의 문자열이나
문자를 프린트해요
또한 주소를 표시하고 그 주소는
거기에 추가한
실제 숫자와 함께요
이제 이 결과물을 봅시다. 왜냐하면 이 결과물은
점 연산의 아주 좋은 예제이기 때문이죠.
코드 블록으로 가서 이걸 실행하죠
여기 코드 블록이 있어요 코드를 좀 정리했어요
strn 길이와 strn 길이를 설정해요 추가로 포함되니까요
이걸 실행하고 싶어요
이것을 실행하면, 메모리가 어떻게 생겼는지
볼 수 있습니다. 연산을 하는 값들도 볼 수
있고요. 다중 sub-0이라고 한다면, 다중은
문자열을 포함한다는 걸 기억하세요.
하지만 이걸 보시면 배열 내용을 보시면 0의
다수는 a, 1의 다수는 띄어쓰기이고 나머지는 문자열이에요
그게 배열이에요
이 바로 옆은 포인터에 0을 더하고 1과
2를 더하는 것과 같아요
그리고 포인터 산수를 할 때 포인터 자체의 부담을 덜어주고
거기에 숫자를 더하는 방법이 나와있어요
포인터에 7을 더하면 G가 되죠
세 번째 열에선 증가에 따라 실제 주소를
보여드리고 있어요 앰퍼를 이용해 배열 내의
각 요소의 주소를 문자 배열에서 0 요소에
대한 주소 060feff 등을 볼 수 있죠
그런 다음 주소를 보죠 포인터 자체에
추가하면 속박 없이요 그럼 주소가 정렬되는
걸 보실 수 있어요
여기서 어떤 일이 벌어지는지 보기 위해 구문을 살펴볼 수 있어요 처음으로
실제로 표시하는 건 배열의 인덱스입니다 그냥 counter죠
그런 다음 % c를 표시합니다 배열에
있는 캐릭터죠
다음에 보여드릴 건
포인터 + I예요
지금 I를 보여주고 있는데요 포인터
+ I의 실효를 보여주고 있어요 실제
값이요
실제 counter는 d로
표시하고 c는 차선책이죠
p는 포인터예요
그냥 p + I, 포인터 산수라고 하고 그걸 차선책으로
하는 거죠
주소를 얻으려면 배열 주소를
얻기 위해 해야 할 일은 ampersand
다수와 인덱스를 입력하는 거죠
포인터의 주소를 먼저 얻으려면 p 더하기 I라고 하면
돼요 실제 counter를
얻으려면요 P를 어떻게 증분하는지
보여주는 거죠 p 더하기 % d만 하면
돼요
하지만 주소에 대해 가리키는
메모리가 실제로 표시되는 다양한 방법을
잘 보여주네요 배열과
실제 포인터의 다양한 인덱스와
어떻게 일치하는지도요
잘 된 것 같아요
다른 예제를 하나 더 볼게요. 긴 산수와
관련된 좋은 예제인데요. 이건 정수예요
하나를
추가하기만 하면 자동으로 다음 바이트로 넘어가죠 우리가 뭘 하는지 보죠 긴 걸 할 거예요
이 예제에선 긴 포인터로 같은 걸 하는 방법을
보여드리고 싶었어요
캐릭터 포인터는 문자열 문자열 배열이죠
크기가 다른 긴 배열에서도 포인터를
이용해 반복할 수 있고 바이트 수가
어떻게 변하는지 볼 수 있죠
비록 긴 포인터에 1 바이트를 추가했지만 사실 4 바이트를 추가했어요
롱 바이트는 조금 더 크거든요 이 예제에서 볼 수 있어요
이제 이 예제를 코드블록에서 실행해보죠
여기 예제가 있어요 정수 카운터, 루프 카운터도 있고요
긴 어레이 15L가 있어요
접미사를 붙여서 l을 지정하고 l, 롱도 지정해요
다수를 가리키는 롱 포인터도 있죠
배열이기 때문에 연산자 주소를 사용하지 않아도 되죠
전부 다 할 거예요 여기선 길이를 쓸 수 없고 크기를
써야 해요 배열의 각 지점으로 나눠야 하죠
전체 크기를 배열의 단일 점으로 나누면 이 지점에서
다음으로 넘어가죠 주소가 각각
4 바이트씩 증가했으니까요
저희는 지금 포인터와 배열을 모두 보여주고
있고 어떻게 연관되어 있는지 보여주고
있습니다 그리고 실제 총 바이트 수를
보여주고 있고요
이건 배열과 포인터의 관계를 시현하는
거예요
이걸 실행하면 비슷한
결과가 나올 거예요 여기서 약간 다른 건 주소
크기예요 4바이트 증가했죠 주소와 포인터를 출력할 거예요
주소와 포인터 더하기 0은 배열
하위 0과 같습니다 주소
6356728이죠
규제에서 포인터로 15의 가치를 얻죠
p 더하기 0은 여전히 배열 하위 0이죠
P + 1 P + 2와 P + 3도 동일합니다
인덱스를 위한 올바른 위치죠
주소는 4 바이트 증가했어요 하지만 여전히 2와 3을 추가할 수 있죠
값이 동일한 걸 알 수 있어요
그리고 4 바이트의 거리를 알려줍니다 그래서 주소가 4 바이트씩 늘어나는 거죠
여기서 중요한 건 우리가 여전히 하나를 추가할 수 있고
컴파일러는 다음 주소로 가야 한다는 걸 안다는 거죠
장문자든 문자든 시스템 내부의 특정
데이터 유형이든 1이나 2를 추가하면
올바른 바이트를 추가하죠
또 다른 멋진 예제를 보여드릴게요
포인터 산수는 정말 중요하거든요 반복하거나
배열을 트래버할 때 정말 유용해요
훨씬 더 깔끔하고 효율적으로 만들죠
도움이 됐으면 좋겠네요 고마워요