본문 바로가기

멋쟁이 사자처럼 BE School

[멋쟁이사자처럼 Back-End School 1기] Day 9. 포인터, Git, GatsBy

C언어 기초

포인터 주소로 원래 변수 훼손하기

// 문제 : 원본값을 훼손하는 change 함수를 만들어주세요.

#include <stdio.h>

// 수정가능지역 시작
void change() {
  int num; // stack으로 변수 num의 메모리 할당
  int* p = &num + 11; // num과 x의 변수의 주소 차이는 44이므로 +11 입력
  *p = 30; // &num + 11 = &x 이므로 *(&x) = 30; == x = 30; 이다.
  printf("== change 함수 시작 ==\\n");
  printf("&num : %ld\\n", (long)&num);
  printf("== change 함수 끝 ==\\n");
}
// 수정가능지역 끝

int main(void) {
  int x = 20; // stack으로 변수 x의 메모리 할당

  printf("&x : %ld\\n", (long)&x);
  printf("change 함수 호출하기 전의 x : %d\\n", x);

  change();  

  printf("change 함수 호출한 후의 x : %d\\n", x);
  // 출력 => change 함수 호출한 후의 x : 50

  return 0;
}

다중 포인터

int a = 10; // 10을 가진다
int* pa = &a; // a의 주소
int** paa = &pa; // pa의 주소

// a == *pa;
// a == *(&a);
// a == **paa;

// 문제 : 원본값을 훼손하는 change 함수를 만들어주세요.(2중포인터)

#include <stdio.h>

void change(int** num) {
  **num = 50; // *p = 50;
}

int main(void) {
  int x = 20;
  int* p = &x;

  printf("change 함수 호출하기 전의 x : %d\\n", x);

  change(&p);

  printf("change 함수 호출한 후의 x : %d\\n", x);
  // 출력 => change 함수 호출한 후의 x : 50

  return 0;
}

포인터 사용 이유

  • Git에 활용된다.
  • 본질 : 공간은 움직일 수 없다.
  • 공간은 위치를 알려주고, 사용할 수 있도록 하는 것 외에는 아무것도 할 수 없다.
  • 변수는 메모리의 공간을 할당
  • 큰 데이터를 공유하고, 공간을 효율적으로 사용할 수 있다.
      → 속도, 메모리 효율을 끌어올릴 수 있다.
  • 메모리 공간의 사용을 확인하고, 변경하기 위해서는 주소를 확인해야 한다.
  • 그 주소가 포인터이다.

Git

  • git commit : git 저장소 디렉토리 안에 있는 모든 파일에 대한 스냅샷을 기록하는 것
    - commit을 할 때마다 이전버전과 다음버전의 변경내용 저장
  • git brench : 특정 커밋에 대한 참조
    - 하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역
  • .git 의 특정폴더 기준 10,000개의 파일 이후로 성능이 저하된다.
  • commit을 할 경우 index의 복사본이 생성
    → tree로 생성된다.
  • 파일의 이름이 아닌 내용을 Hash(sha1) 하여 index에 저장

  • 내용이 Hash 된 앞의 두 글자(”e9”)의 폴더 안에 나머지 글을 이름으로 하는 파일 생성
directory folder
→ echo a.txt생성 > a.txt // new file 생성
→ echo b.txt생성 > b.txt
→ git add . // folder 내 file들을 workspace → index로 이동
→ git commit -m "메세지" // index → local repository 로 이동
→ git push origin master // master brench로 push (local repository → **remote repository)**
// push 이용 시 pull 진행 후 변경했는지 확인 필요(충돌 발생)
**!** git pull origin mater // remote repository → workspace

 

GatsBy

  • JAM Stack을 활용한 “정적 사이트” 생성기

  • gatsby 설치 : npm install -g gatsby-cli
  • 새로운 project 생성 : gatsby new

 

 

후기 : 이번주에 들어서면서 조금 어려운감이 많다. 조금만 더 열심히 따라가려 노력해보자 제발 화이팅 성공하자