2021.03.02.화 2차원 배열 선언과 요소 사용 ✔ 4개 과목 점수를 한 명의 학생의 것만 처리할 때에는 int형 배열 하나로 가능하다. ✔ 여러 학생의 점수를 처리해야 할 때에는 같은 형태의 배열이 여러 개 필요한데 이런 경우 2차원 배열을 사용한다. ✔ 말하자면 2차원 배열은 1차원 배열을 요소로 가지는 배열이다. ✔ 2차원 배열을 사용해 1차원 배열 여러 개를 연속성을 지니게 해서 사용할 수 있다. ✔ 2차원 배열은 아래와 같이 행과 열로 표현하고 이해하는 편이 좋다. score[2][4] score[0][0] score[0][1] score[0][2] score[0][3] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 sco..
2021.03.01.월 지역 변수 ✔ 지역 변수는 예약어 auto와 함께 선언하며, 생략 가능하다. 자동 초기화되지 않는다. ✔ 지역 변수는 블록 내부로 제한되므로, 다른 함수에서 사용할 수 없다. ✔ 블록 범위는 중괄호를 기준으로 결정된다. ✔ 각 각 독립된 저장 공간이기 때문에 다른 함수에 같은 이름의 변수를 선언해도 충돌하지 않는다. #include void swap(int a, int b); int main(void){ int a = 10; int b = 20; swap(a,b); printf("a = %d, b = %d\n",a,b); // a = 10, b = 20 → 값이 그대로인걸 확인할 수 있다. } void swap(int a, int b){ int temp = a; a = b; b =..
2021.02.25.목 이 전의 #7일 차 정리에서는 문자열 관련 함수의 사용 예제를 위주로 살펴보았다면 이번에는 함수의 원형, 즉 함수의 선언부를 살펴보려 한다. 아래의 함수는 모두 헤더 파일에 속해 있으므로 반드시 전처리가 필요하다. strcpy() 함수 ✔ char 배열은 문자열을 저장하는 변수의 역할 ✔ 다른 문자열로 바꾸어야 할 때에는 변경하고자 하는 문자열의 문자를 요소마다 다시 저장해야 하는 번거로움이 있다. ✔ 첫 번째 인자로 저장할 공간의 주소(포인터)를 받고, 두번째 인자로는 수정할 문자열을 받는다. char * strcpy(char * dest, const char * src) ; ✔ 첫번째 인자(dest)로 받을 수 있는 값은 char 배열과 배열명을 저장한 포인터만 가능. ✔ 문자..
2021.02.24.수 아스키 코드 ✔ 알파벳과 숫자는 연속된 아스키 코드를 가지고, 소문자가 대문자보다 아스키 코드 값이 크다. ✔ 제어문자도 문자를 의미하는 형식지정자 %c를 사용해 출력할 수 있다. ✔ 실제로 문자는 4byte의 크기를 가지지만, 아스키 코드는 0~127의 범위를 가지므로 가장 오른쪽 1byte만 의미를 가진다. ✔ 대문자 'A' 는 65, 소문자 'a' 는 97로 표현이 가능하며, 아스키 코드는 연산이 가능하므로 'A' + 32 = 'a' 가 된다. #include int main(void){ printf("%c + %d = %c", 'A',32,('A'-32)); //'A' return 0; } ✔ Space Bar, Tab, Enter와 같은 화이트 스페이스는 여러 값을 입력 ..
2021.02.23.화 배열의 주소 ✔ 배열은 같은 자료형의 변수를 메모리를 연속으로 할당한다. ✔ 그러므로 배열의 요소들은 일정한 간격으로 주소를 갖게 되는데, 이는 자료형의 크기와 같다. ✔ 만약 배열 arr가 100번지부터 할당된다면, arr[0]은 100~103번지를 가지고 arr[1]은 104~107번지를 가진다. ✔ 배열의 요소는 위와같이 자료형과 같은 크기의 공간을 할당받게되고, 그 첫번째 공간의 주소가 곧 요소의 주소가 된다. ✔ 그리고 배열은 할당 받은 전체 공간의 첫번째 메모리의 주소를 가지게 된다. ✔ 결국 배열의 첫번째 요소의 주소를 알게되면, 배열의 주소뿐만 아니라 다른 요소의 주소도 쉽게 알 수 있다. #include int main(void){ int arr[3]; printf..
2021.02.22.월 포인터를 사용하는 이유 ✔ 변수는 선언된 위치에 따라 사용할 수 있는 범위가 결정된다. ✔ 매개변수로 받아오는 경우 값을 복사해 함수 내부에서 새로운 변수로 선언된다. ✔ 그렇기 때문에 아래와 같이 main함수 내부에서 선언 및 초기화된 변수는 인자로 다른 함수에 전달해 수정하더라도 main함수 내부의 값에는 영향을 주지 않는다. #include int test(int number){ number = 20; return number; } int main(void){ int number = 10; test(number); printf("%d", number); return 0; } ✔ 만약 main함수 내부의 변수에 접근해서 값을 수정하고 싶다면 어떻게 해야 할까? ✔ 주소 연산자 ..
📌 Unit 60. 함수 ✔ 60.5 연습 문제 #include void printName() { printf("Beethoven\n"); } void printOrdinal() { printf("9th\n"); } int main() { printName(); printOrdinal(); return 0; } ✔ 60.6 연습 문제 #include void printHostname(); void printIPAddress(); int main() { printHostname(); printIPAddress(); return 0; } void printHostname(){ printf("Saturn\n"); } void printIPAddress(){ printf("192.168.10.6\n"); } ✔..
2021.02.17.수 포인터 ✔ 변수의 메모리 주소를 구할 때에는 변수 앞에 주소 연산자 & 를 사용한다. ( &는 ~의 주소를 의미) ✔ 메모리 주소를 출력하고자 한다면, 형식 지정자 %p와 ~의 주소를 의미하는 주소 연산자를 사용한다. #include int main(void){ int a = 10; printf("%p", &a); //0x7ffd8ff8b0e4 return 0; } ✔ 이러한 메모리 주소는 포인터 변수에 저장할 수 있다. ✔ 포인터 변수를 선언할 때에는 변수와 같은 방법으로 선언하되, * 을 사용하여 아래와 같이 선언한다. #include int main(void){ int a = 10; int *p = &a; printf("%p\n", &a); //0x7ffd8ff8b0e4 pr..