함수 포인터, Linux vi 편집기의 설치와 사용
학습목표
- 함수 포인터의 문법을 이해하여 printf, scanf문을 사용자 생성 함수 포인터로 만들어 사용할 수 있다.
- 메모리 5대 영역을 이해하고 어떤 내용이 각 메모리에 저장되는지 알 수 있다.
- 리눅스 vi 편집기의 수정모드 명령모드 확장명령모드의 이동법을 익힌다.
- vi 편집기를 활용하여 간단한 코드를 작성하고 컴파일 할 수 있다.
- vi를 활용하여 간단한 편집을 할 수 있다.(삭제, 줄이동, 커서 이동)

// 초기화 되지 않은 전역변수는 변수 값에 0이 들어 있고 이것은 BSS영역에 저장된다.
메모리에 저장된 5가지 영역은 전부 포인터로 가리킬 수 있다.
지금까지 배운 바로는 Code 연역을 제외한 모든 메모리 영역을 가리킬 수 있었다.
오늘은 포인터로 Code영역을 가리키는 내용을 배워본다.
// 함수를 메인함수 밑에 선언한 경우 함수의 원형을 메인함수 위에 적어 주어야 한다.
// Code 영역은 RO로써 Read Only memory로써 오직 읽기만이 가능하다.
함수를 가리키는 포인터를 만들어 보자.
함수 포인터의 원형은 만들기 위해서,
1. 우선 기본적인 함수의 원형에서 이름을 제거한다.
ex) int main(void) -> int (void)
2. 함수의 이름을 넣었던 자리에 *을 넣는다.
ex) int (void) -> int *(void)
3. *만 넣기 어색하니까 *를 괄호로 싸준다.
ex) int *(void) -> int (*)(void)
4. * 옆에 변수명을 적어준다.
ex) int (*)(void) -> int (*smart)(void)
결과물은,
void (*smart)(void); //smart는 본인 지정 이름으로써 변경 가능

1. const char *A;
2. char const *A;
3. char * const A;
const를 선언하면 바로 우측에 있는 값이 상수가 된다. 때문에 1번과 2번의 경우에는 *가 상수(값을 수정할 수 없다)가 됨으로 A는 변수가 된다.
// 1번과 2번에서 const의 위치는 내용에 지장을 주지 않는다.
// 대입 연산자에서 왼쪽이 code 영역이 오면 에러가 난다. ex) 6 = 3;

//함수의 원형을 알고 싶을 때는 대입 연산자를 활용하여 일부러 에러를 내서 해당 함수의 원형을 알아 낸 후에 코딩을 한다.
예제 p/394

p/395 예제,

p/397 예제,

함수 포인터는 어떻게 응용할 수 있을까? To be continued(다음 시간에)
산딸기 시간,
ftp공유 폴더에 있는 RaspBerryPie관련 파일들을 모두 복사해서 내 컴퓨터에 저장해 놓는다.

vim 설치.txt 파일을 열어 설명에 따라 vim을 설치한다.
vi편집기에 대해서 배워보자.
vi편집기는 리눅스와 유닉스에서 visual editor로써 보급되어 왔다.
vi의 3가지 모드(mode)를 가지고 있다.
1. 명령모드 - 맨 처음 실행시키면 명령모드로 들어간다.
2. 수정모드
3. 확장 명령모드 - 커서가 제일 밑으로 가면 확장 명령 모드이다.
수정모드와 확장 명령 모드에서 ESC키를 누르면 명령 모드로 들어가진다. 현재 무슨 모드인지 모를 경우 ESC를 누르면 된다.
명령모드에서 수정모드로 이동하는 키(key)는 I(insert), a, o, r키이다.
명령모드에서 확장 명령 모드로 이동하는 키는 : 이다.
명령모드에서,
dd: 한줄 삭제
확장 명령모드에서 숫자를 치면 해당 줄로 이동한다. // 존재 줄보다 큰 값을 입력하면 마지막 줄로 이동
d + # + 방향키: #만큼의 줄을 방향키 방향으로 지움
확장wq를 누르면 vi 편집기를 빠져 나오게 된다.
vi 편집기에서,

I 수정모드로 간 후 위의 내용을 갖다 붙힌다.
확장 명령 모드에서 wq를 치고 빠져 나온다. //wq: write quit
vi. main.c를 입력한 후, 기본형을 쳐서 위의 입력한 값이 제대로 작동하는지 본다.
간단한 코드를 입력한 후 해당 코드를 컴파일 해보자.
컴파일 명령어,
gcc -o main main.c // gcc -o_만들 실행 파일명_소스파일
리눅스는 exe파일의 개념이 없다. 때문에 실행 파일명만 입력해주면 된다.




shift +D 는 현재 위치로부터 끝까지 삭제
u = 윈도우에서 Ctrl + z
o 키는 새 줄을 삽입하고 insert모드로 바뀐다.
shift o 는 위에 새 줄을 삽입하고 insert모드로 바뀐다.
//shift를 누른 상태에서의 명령어는 반대 기능을 가지는 확률이 높다.
//vi의 구현 목적은 마우스를 사용하지 않고 텍스트 편집을 할 수 있게 하는 것이다.
명령모드에서 h는 왼쪽으로 이동 l은 오른쪽으로 이동 j는 아래로 이동 k는 위로 이동이다.
vi test.txt파일을 만들면 linux에서 .test.txt.swp를 만든다.
wq로 해당 파일을 빠져 나오지 않으면 .test.txt.swp가 삭제되지 않고 백업파일 형식으로 남게 된다.
putty접속을 x를 눌러 종료하고 vi test.txt를 입력하면,
아래와 같이 뜨게 된다.
