200805_TIL

hyeojung·2020년 8월 5일
0

TIL

목록 보기
5/62
post-thumbnail

부스트 코딩뉴비챌린지

  • 어느덧 미션 제출일이 되었다. 미션 1과 미션 2는 코드를 짜서 제출했고, 미션 3은 방법은 생각해냈는데 알바 때문에 코드 작성해볼 시간이 없어서 의사코드도 작성 못하는 바람에 제출을 못했다ㅠㅠ 늦게나마 작성한 의사 코드는 비공개 게시글로 올려 두었다.
  • 문제를 풀기 위한 알고리즘을 공부하는 것은 물론 쉽지는 않지만 확실히 사고력을 길러 주는 것 같다. 그리고 재밌다!
  • 오늘 팀원 분들 중 한 분이 중도포기를 고려할 만큼 멘붕이 오신 모습을 봤다ㅠㅠ 리더로서 더욱 팀원분들이 코딩 중 겪는 문제들을 함께 고민해보도록 노력하고, 많이 도와드려야겠다고 생각했다,,, 물론 나도 잘 못하지만,,
  • 벌써 챌린지가 반 넘게 진행되었다. 앞으로는 지금까지 했던 것보다 더 노력해서 멋지게 완주해야겠다...!!

윤성우의 열혈 C 프로그래밍

13-1 포인터와 배열의 관계

포인터 변수배열의 이름
이름이 존재하는가?존재한다존재한다
무엇을 나타내거나 저장하는가?메모리의 주소 값메모리의 주소 값
주소 값의 변경이 가능한가?가능하다불가능하다

13-2 포인터 연산

  • *연산자는 포인터가 가리키는 주소에 저장된 값을 출력한다. 이 연산자 뒤에 배열의 이름이 오면, 배열의 첫 번째 요소를 반환한다.
  • 즉 배열의 이름은 포인터 상수이다!
  • arr[i] == *(arr+i)

문제 13-1 포인터를 이용한 배열의 접근

문제 1
#include <stdio.h>

int main() {
	int arr[5] = { 1,2,3,4,5 };
	int* ptr = arr;

	for (int i = 0; i < 5; i++) {
		*ptr += 2;
        ptr++;
		printf("%d ", arr[i]);
	}
}
문제 2
#include <stdio.h>

int main() {
	int arr[5] = { 1,2,3,4,5 };
	int* ptr = arr;

	for (int i = 0; i < 5; i++) {
		*(ptr + i) += 2;
		printf("%d ", arr[i]);
	}
}
문제 3
#include <stdio.h>

int main() {
	int arr[5] = { 1,2,3,4,5 };
	int* ptr = &arr[4];

	for (int i = 0; i < 5; i++) {
		*ptr -= 1;
		ptr--;
	}
	for (int j = 0; j < 5; j++)
		printf("%d ", arr[j]);
}
문제 4
#include <stdio.h>

int main() {
	int arr[5] = { 1,2,3,4,5 };
	int* ptr = &arr[4];

	for (int i = 0; i < 5; i++) {
		*(ptr - i) -= 1;
	}
	for (int j = 0; j < 5; j++)
		printf("%d ", arr[j]);
}

13-3 상수 형태의 문자열을 가리키는 포인터

  • 배열 형태로 선언되는 문자열은 변수 형태의 문자열(내용 변경 가능), 포인터 변수에 선언되고 초기화되는 문자열은 상수 형태의 문자열(내용 변경 불가능)이 된다.
    - 예를 들어 char * str = "const string"; 이라고 문자열을 선언한 경우 문자열이 먼저 메모리 공간에 저장되고, 그 메모리의 주소 값이 반환된다. 즉 문자열이 저장된 이후에는 위의 문장이 char * str = 0x1234 와 같은 형태가 된다.

13-4 포인터 변수로 이뤄진 포인터 배열

  • 포인터 변수로 이루어져 주소 값의 저장이 가능한 배열을 포인터 배열이라 하며, int* arr[] = {&a, &b, &c}; 과 같이 선언한다.
  • 문자열을 저장하는 포인터 배열: 문자열 배열은 문자열의 주소 값을 저장할 수 있는 배열로, 사실상 char형 포인터 배열이 된다. char* strArr[3] = {"simple", "string", "array"}; 와 같이 선언한다. 이 문장이 실행되면 초기화 리스트에 선언된 문자열들은 메모리 공간에 저장되고, 그 주소값이 반환되어 배열에 저장된다.


오늘 공부하면서 느낀 점

  • 포인터 정말 어렵다길래 긴장하면서 공부했는데, 개념 이해가 헷갈리긴 하지만 많이 어렵지는 않다. 괜찮은듯?
  • 아직 포인터와 배열, 포인터와 함수의 만남을 제대로 맛보지 않아서 자신감이 넘치는 것일 수도,,,, 내일 마저 공부해야지!
  • 드디어 chapter 13을 끝냈다.(p308) 포인터 앞부분까지는 알던 부분이라서 내용을 정리하지 않고 TIL을 간단히 기록했지만 앞으로는 조금씩 기록하면서 공부할 예정이다.
  • 화이팅 !
profile
응애 나 애기 개발자

1개의 댓글

comment-user-thumbnail
2020년 8월 6일

엇 TIL 태그보고 들어왔는데 글 내용보다가 뜨끔ㅋㅋ 저희 팀 리더님이신 것 같은데ㅋㅋ C언어 열심히 공부하고 계시네요!! 어제 좋은 말씀 감사했습니다 화이팅!

답글 달기