본문 바로가기

전체 글

C 언어 0.05 - 포인터 ( pointer ) Pointer 란? 쉽게 말해서 메모리 상에 위치한 특정한 데이터의 주소값을 보관하는 변수이다. 포인터는 하나의 타입으로 32 비트 : 4 byte 64 비트 : 8 byte 를 차지한다. int *p = &a; 이중 Pointer #include int main() { int *numPtr1; // 단일 포인터 선언 int **numPtr2; // 이중 포인터 선언 int num1 = 10; numPtr1 = &num1; // num1의 메모리 주소 저장 numPtr2 = &numPtr1; // numPtr1의 메모리 주소 저장 printf("%d\n", **numPtr2); // 20: 포인터를 두 번 역참조하여 num1의 메모리 주소에 접근 return 0; } 포인터도 실제로는 변수이기 때문에 메.. 더보기
C 언어 0.04 - 배열 ( array ) 배열의 기초 /* 배열 기초 */ #include int main() { int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int arr[] = {1,2,3,4,5} // 크기가 5인 배열 printf("Array 3 번째 원소 : %d \n ", arr[2]); return 0; } 배열은 말 그대로 특정한 형의 변수들의 집합이다. 배열의 선언은 다음과 같다. ( 배열의 타입 ) ( 배열의 이름 ) [원소 개수] ; 다음과 같은 코드가 있을 때 컴파일러는 내부적으로 int arr[3] = {1,0,0} 이라고 생각한다. int arr[3] = {1}; 고차원 배열 /* 2 차원 배열 */ #include int main() { int arr[3][3] = {1, 2, .. 더보기
C 언어 0.03 - 문자열 ( string ) 선언 ( Declare ) 아래와 같이 선언해주면 된다. 유의할 점 %s 사용할 것 string 타입은 문자열의 끝을 컴퓨터에게 알려주기 위해서 ' \0 ' 을 반드시 넣기 때문에 문자열의 길이 + 1 을 반드시 해줘야한다. 원하는 배열의 크기 + 1 반드시 해줘야 한다~ Null 의 아스키코드는 0 이다. 문자 '0' 의 아스키코드는 48 /* 문자열의 시작 */ #include int main() { char sentence_1[4] = {'P', 's', 'i', '\0'}; char sentence_2[4] = {'P', 's', 'i', 0}; char sentence_3[4] = {'P', 's', 'i', (char)NULL}; char sentence_4[4] = {"Psi"}; char .. 더보기
C 언어 0.02 - fgets vs scanf fgets vs scanf scanf : 문자를 입력 받을 때 공백문자(' ', '\n', '\t') 만나기 전까지만 입력 받을 수 있다. 그 이유는 scanf 는 stdin 에서 데이터를 얻어오기 때문에 stdin 에서 위 세 개의 문자열을 만난다면, 아 여기서 입력은 끝이구나 하고 입력을 종료해버리기 때문이다. printf("30 자 이내의 문자열을 입력해주세요! : "); scanf("%s", words); // 실행결과 30 자 이내의 문자열을 입력해주세요! : what is your name 문자열 : what fgets : 스트림에서 문자열을 받아서 (num - 1) 개의 문자를 입력 받을 때 까지나, 개행 문자나 파일 끝(End-of-File) 에 도달할 때 까지 입력 받아서 C 형식의 문자.. 더보기
C 언어 0.01 - 변수 (variable) 변수란 무엇인가? 컴퓨터는 많은 내용들을 기억해야 한다. 많은 내용들을 기억하기 위해서는 기록들을 저장할 일종의 저장소가 필요한데 컴퓨터에서는 RAM이라는 특별한 기억공간이 저장소의 역할을 하게 된다. 변수는 바뀔 수 없는 어떤 값을 보관하는 곳이다. 그릇이라고 생각하면 편하다. 변수의 종류 타입 크기 표현식 char 1 byte %c short 2 byte %sh int 4 byte %d long 4 byte %ld longlong 4byte or 8byte %lld float 4byte %f double 8byte %lf 배경색: usually use. 추가적으로 %o : 8진수로 표현. %x : 16진수로 표현. 변수 선언 int main() { float a = 3.141592f; // doubl.. 더보기
[INTRO] - 왜 C언어를 알아야 할까? 왜 Why? 우선 필자는 C ++ , JAVA 를 사랑해 C 언어 같이 무식한 언어를 뭐하러 알아야 하냐? 라는 마인드를 지니고 있었다. 하지만 전공 공부를 하면서 시스템 프로그래밍의 기본이 되는 C 언어의 중요성에 대해서 깨달아 갔고 이번 기회에 내가 공부하고 알고 있는 C 에 대한 내용들을 블로그를 통해서 남기려고 한다. 지금의 기록이 나의 발전에 도움이 될 수 있도록..! 배운 것을 절대로 까먹고 싶지 않아..!!!!!!! C 언어의 발자취 C 언어는 무려 50년 전에 출시된 언어이다. 그 때부터 지금까지 컴퓨터의 비약적인 성장이 있었고, 마찬가지로 기존 언어들을 대체하는 많은 언어들이 쏟아져 나왔습니다. 그래서 파이썬과 같은 언어들과 비교해서 조금 하드한 부분이 있습니다. 하지만 그럼에도 불구하고.. 더보기
[중요] C++ 0.07 - new, delete C vs C++ // C int *p = (int *)malloc(sizeof(int) * N); for (int i = 0; i < N; i++) p[i] = i; free(p); // C++ int *p = new int[N]; // or int &p = new int[N]; for (int i = 0; i < N; i++) p[i] = i; delete[] p; N : 할당할 배열 개수. Example int *p = new int; // pi points to unintialized int int *pi = new int(7); // which pi points has value 7 string *ps = new string("hello") // ps points "hello" int *pia =.. 더보기
[중요] C++ 0.06 - Reference Operator & Reference Operator 란? Refercece Operator는 C의 Pointer 와 동일한 역할을 하는 것으로 A Reference allows to declare an alias to another variable. C++ 에서는 함수가 value를 리턴할 때, return 할 value를 stack에 카피하는데 calling function은 stack에 저장된 변수를 읽어서 그걸 다시 변수에 copy 한다. 하지만 Reference Operator는 함수를 부를 때 스택으로 Parameter를 Copy 하는 비용을 줄여준다!! 예제로 살펴보도록 하자! Code ( Pointer vs Reference ) // using pointer void swap(int *a, int *b) { .. 더보기