전체 글(1142)
-
함수포인터
함수포인터는 함수의 주소를 담는 변수로 다음과 같이 쓰인다 #include void func(int a) { printf("value of a is %d\n", a); } int main(void) { void (*p)(int); p = func; p(3); void (*q)(int) = &func; (*q)(4); return 0; } q를 선언해서 사용할 때 &를 지워서 사용할 수 있다. 함수의 이름은 즉 함수의 주소를 가리키기도 한다 #include void func(int a) { printf("value of a is %d\n", a); } int main(void) { void (*p)(int); p = func; p(3); void (*q)(int) = func; q(4); return 0;..
2019.11.13 -
함수포인터가 쓰이는 경우
함수포인터는 함수의 주소를 가리키는 포인터다. 일반적으로 다음과 같을 때 사용한다 반환형과 매개변수가 같은 함수의 주소를 가리키게 된다 #include #include typedef struct hello { void (*print_hello)(void); } Hello; void hello(void) { printf("hello world\n"); } int main(void) { Hello *h = (Hello *)malloc(sizeof(Hello)); h->print_hello = hello; h->print_hello(); return 0; } 보통 C언어는 객체지향 문법을 지원하지 않는다고 알려져 있다. 하지만 C언어에서도 구조체와 함수 포인터를 활용하면 충분히 객체지향으로 프로그래밍을 할 수..
2019.11.13 -
포인터 배열과 배열 포인터
포인터 배열과 배열 포인터은 비슷한 느낌을 주지만 분명히 다른 표현이다 선언 자체에서 다른데, 포인터 배열은 포인터가 여러 개 포함된 배열을 의미한다. 배열 포인터는 배열을 지칭하는 포인터로 보면 된다 포인터 배열은 int *p[3]과 같이 int *p[0], int *p[1], int *p[2] int형 자료형의 주소를 가리킬 수 있는 포인터 변수가 3개 있는 것을 알 수 있다. 배열 포인터는 포인터 배열과 선언이 유사한데 소괄호를 붙인다는 점에서 다르다. 즉 int (*p)[3]처럼 선언을 하는데 이는 int 형 배열의 크기를 3을 갖는 배열의 시작 주소를 가리키게 된다
2019.11.13 -
signed 자료형에서의 비트 반전
signed char 값의 범위는 -128 ~ 127이다 비트 반전 ~ 연산자를 signed char에 씌우면 값은 어떻게 변하게 될까 0 ~ 127은 부호가 반전이 되면서 1이 더해진 값이 반전된 값으로 된다 -1 ~ -128도 부호가 반전이 되지만 1이 빼진 값이 반전된 값으로 된다 #include int main(void) { char num = 10; printf("not num = %d\n", ~num); return 0; }
2019.11.13 -
17836 공주님을 구해라!
bfs문제로 검을 얻었을 때와 얻지 않았을 때의 최소거리를 구분해줘서 마지막 답에서 비교해서 최소값만 구하면 된다 문제: https://www.acmicpc.net/problem/17836 깃허브주소: https://github.com/surinoel/boj/blob/master/17836.cpp
2019.11.13 -
vim 여러 줄 주석하기
여러 특정 줄을 주석하는 주석하는 방법은 여러가지가 있다 1. esc모드에서 다음과 같이 설정할 수 있다 :s/^/\/\/ :s/^/# :시작행,끝행/^/# 2. [참고] https://www.youtube.com/watch?v=CRgbuVx59dY 1) ctrl + V로 주석을 하고 싶은 행을 정한다, 화살표 혹은 j, k로 움직인다 2) shift + I를 누르면 블록을 잡은 것을 맨 앞 행으로 움직인다 3) insert 모드로 진입할텐데 자신이 원하는 주석 문자를 쓴다. 예를 들어 //, # 4) 그리고 esc를 누르면 잡았던 블럭에 문자가 생긴다 반대로 주석을 지우는 방법은 1) ctrl + V로 주석을 지우고 싶은 행을 정한다, 화살표 혹은 j, k로 움직인다 2) 그리고 x를 눌러 삭제를 한다
2019.11.12