개인적으로 js에 관심이 많이 있기에 알고리즘 풀이 언어를 node.js로 가져가고 있었다. 하지만 파이썬, 자바, c++로만 풀 수 있는 문제들도 프로그래머스에서 출제가 되곤 하는 것을 깨달았다. 그래서 틈틈이 c언어 공부를 시작하기로 했다. c++ 이 c언어를 기반으로 하고 있기에 들어가기 앞서 c언어에서 기본적으로 꼭 알아야 하는 핵심 개념들을 틈나는 대로 정리하고자 한다.
c언어에서 포인터란 메모리의 주소값을 저장하는 변수이다.
다른 언어들에서는 직접 주소에 접근하는게 쉽지 않았는데 c언어는 메모리의 주소 값에 접근하기 매우 편리하다. 다음 2가지 연산자가 메모리의 주소 값 접근과 수정을 편리하게 해 준다.
* 연산자 ex) int *p = 10
1) 포인터 변수의 선언에 사용 (위의 경우 포인터 p를 선언하는 데 사용됨)
2) 메모리 주소 값에 해당하는 실제 값을 저장 및 반환할 수 있게 함.
3) 에스크리터라고 읽는다.
& 연산자 ex) int*p = $num
1) 변수의 메모리 주소 값을 가져오는 단항 연산자이다.
2) 앰퍼센드라고 읽는다.
이 두 가지를 조합하여 메모리의 주소 값을 가져오거나 주소 값이 가리키는 실제 데이터를 수정할 수 있다.
포인터 변수와 *, & 연산자를 통해 num이라는 변수의 주소 값에 접근하고 주소 값이 가리키는 실제 데이터를 수정하는 예제를 만들어 보았다.
#include <stdio.h>
int main() {
int *p;
int num = 10;
p = #
// num의 실제값을 바꿈
*p = 11;
// 포인터 출력해보기
printf("%p \n", p);
// => 0061FEC8 (num변수의 주소 값)
printf("%d \n", *p);
// => 11 (num주소에 들어있는 실제 값, 위의 *p=11을 통해 10에서 11로 바뀌어 있음)
// 실제 맞는지 확인
printf("%d \n", num);
// => 11
printf("%p \n", &num);
// => 0061FEC8
return 0;
}
'알고리즘' 카테고리의 다른 글
우선순위 큐 올바른 dequeue (0) | 2020.09.10 |
---|---|
c언어 포인터(연산) (0) | 2020.01.09 |
프로그래머스 탑 자바스크립트로 풀기 (0) | 2019.12.24 |
[DFS] 프로그래머스 네트워크 Javascript 풀이 (0) | 2019.11.04 |
코드그라운드 개구리 뛰기 (0) | 2019.10.24 |