전체 글

거거거중지 행행행리각
c언어/워딩(미정리)

배열

배열 배열이란, 개수가 ‘n개’로 자료형이 있으면, 이 자료형이 1개면 변수지만, n개가 되면 배열이 된다. 배열과 포인터는 짝꿍으로 알고 있으라고 하는데, 사실 포인터도 배열과 같이 쓸 수 있기 때문에 둘의 경계가 별로 없는 이유에서다. 그래서 대부분의 강좌나 설명에서도 배열과 포인터를 같이 다룬다. 다만, 배열의 값과 포인터가 가리키는 값이 같지만, 포인터는 직접 값이 아니라, 주소로 유도하는 값이므로, 포인터는 관리, 배열은 사용에 목적을 둔다고 했었다. int, int, int, int인 int w, x, y, z;는 int라는 것 4개가 같이 있는 것으로, int [4]라고 줄일 수 있다. 이렇게 동일한 자료형이 여러 개 필요할 경우에, 그래서 자료형 여러 개를 선언할 경우, 하나 하나 일일이 ..

c언어/워딩(미정리)

동적할당

동적할당 RAM의 메모리를 쓰는 경우가 2가지가 있다고 했다. 변수와 동적할당이 이 2가지다. 그리고 메모리를 쓰고 받는 데는 3가지 과정이 있었다. 요구, 사용, 반환이 이 3가지다. 이것을 변수는 요구와 반환이 자동인데, 동적할당은 수동이다. 그래서 동적할당은 요구와 반환을 따로 함수로 해주어야 된다. 그렇지 않으면 영원히 반환이 안돼서 메모리가 해제될 때까지 계속 남아있는 릭(leak)이 생기게 된다. 그런 일이 발생하지 않으려면 free(); 함수로 메모리를 해제해야 된다. 그 메모리는 malloc(); 으로 동적할당을 하는 경우에서이다. 그러면 왜 동적할당을 할까? int nData[10]으로 변수를 선언했다고 하자. 이때 메모리는 4byte * 10으로 40바이트가 된다. 이 때 변수의 메모리..

c언어/워딩(미정리)

다중포인터

다중포인터 pointer 변수는 말 그대로, 정보를 담는 변수지만, 그 정보가 주소라는 점에서 변수를 가리키는 역할을 한다. 여기서 포인터 변수의 중요한 점은 ~에 대한 포인터 변수라는 점인데, 이 ~이 char자료형이 되기도 하고, int자료형이 되기도 하지만, 특이하게도 char*가 되기도 한다. 이때에는 (char*) *라고 쓰는데 이 가로는 생략할 수 있어서 char * *로 쓸 수 있다. 이것은 2중 포인터고, char* **는 3중 포인터, char* ***4중 포인터 순으로 이어지는데, 사실 3중 포인터 까지만 해도 쓰는 사람이 문제를 내는 것 빼곤 없는 수준이기에, 2중 포인터만 봐도 무방하다. 이 모든 연속되는 포인터를 모두 ‘다중 포인터‘라고 한다. int 자료형이 있다면 그 자료형의 ..

c언어/워딩(미정리)

포인터와 배열

알아두어야 할 점 char *pszData = "Hello"; 라는 식에서 pszData에는 무엇이 저장이 될까? 나는 그래도 변수니까 hello가 저장될 줄 알았는데, 사실은 hello가 저장되어있는 주소가 저장되는 것이다. hello는 배열로 배열의 기준인 h의 주소가 저장이 되는 것이다. (사실 []는 *와 똑같다. 다차원 배열은 예외) 그래서 char *pszData = "Hello"; 는 char *pszData = (H의 주소)[0]; 과 같다. 이 점 알아두고 예제를 들어가자. 예시 char szName[16] = {"Hong gildong"}; char *pszName = szName ; printf ("%c\n", szName[3]); 라는 식이 있다고 하자. 여기서 배열의 이름은 그냥 ..

c언어/워딩(미정리)

포인터변수

다시 한 번 메모리에 대해서 설명하자면, 컴퓨터의 메모리는 32비트 플랫폼이면 그게 2^32byte의 메모리가 있는데 이것이 4GB고, 이 각각의 메모리에서는, 고유주소를 가지고 있다고 했다. 강의를 들어가면서 누누이 설명한 내용이니 영상의 마지막언급이므로 확실히 알아두자. 여기서 위치정보를 가지고 그 위치에 있는 정보를 가진 무언가를 접근하는 것이 ‘포인터’다. 사실 포인터와 배열은 거의 같다(==). 비유하자면, 그릇에 정보가 있는 것과, 그냥 정보만 있는 것의 차이다. 포인터 포인터는 지도, 단축아이콘, 별명, 또 다른 방법 등으로 비유해서 이해할 수 있다. 이 비유가 설명하는 점은, 포인터는 어떤 정보를 담는 그릇을 (위치정보, 고유주소로) 가리켜서 결국 가리키는 정보를 추가로 연결해주는 역할이다..

c언어/워딩(미정리)

문자열과 배열 복습

문자열과 배열 복습 문자와 문자열에는 중요한 차이가 많다. 문자는 %c, %d로 1개로 간단하지만, 문자열은 n개로 %s라는 특징이다. 여기서 배열과 주소, 문자열하면 빠질 수 없는 이야기다. 여기서 이 배열의 그릇을 가리키는 것이 포인터(Pointer)다. 포인터는 주소를 가리키는 것이 매우 중요하다. 우선은 포인터와 빠질 수 없는 배열에 대해 복습한다. 32bits에서는 2^32로 4GB를 가지고 있고, 이 메모리하나하나에 각각의 주소를 가지고 있다고 들어가는 강의 때 배웠다. char에서 문자열 6개를 선언한다면, 여기서 맨 왼쪽(가장 빠른 고유주소)이 기준이 되는 것이 중요하다. 그래서 110, 111, 112라는 세 주소가 있으면, 112는 110의 오른쪽으로 2칸이라고 해서 110+2라고 할 ..

c언어/워딩(미정리)

별찍기

예제로 도형출력 지난시간 배운 예제를 가지고, 직각삼각형을 출력할 수 있을까? 반복문을 배우면 거의 반드시 들어가는 문제로, 많은 분들이 배우실 때 어려움을 겪는 문제다. 여기서 논리를 파악하자면, 가로를 내부 반복문이고, x축이라고 본다면, 세로는 외부 반복문이고, y축이 된다. 이때 x와 y의 수의 차이에 따라서 ‘개행’이 되냐 아니냐에 차이인데, 이정도가 도형을 출력하는 논리다. 이 도형 출력의 코드는 엄청 쉽다. 단지, 내부 반복문에서 for(x = 0; x < 5; x++)를 for(x = 0; x

c언어/워딩(미정리)

중첩되는 반복문

반복문의 중첩 ‘*‘를 5번 반복해서 출력하는 반복문이 있다고 한다. 여기서 이 반복문을 4번 또 반복하는 경우도 있는데, 사실 이러는 경우는 5 × 4 = 20으로 그냥 *을 20번 반복하면 될 것 같지만, 이와 다른 경우에는 반복문을 2개 끼워 넣는 것이 효과적일 수가 있다. 여기서 반복문이 반복문에 들어있는 경우를 ’반복문의 중첩’ 이라고 한다. 이 반복문의 중첩을 슈도코드를 예로 들어서 설명할 수 있다. (여기서 슈도코드 ‘pseudo code’ 란, 의사코드라고도 하는데, 풀어서 말하면 코드를 흉내 내서 논리를 표현한 자유로운 표현과 언어로 쓴 코드다.) 만약에 백화점에서 쇼핑을 하는 여자가 하는 일을 코드로 작성한다면, while(둘러볼 매장이 있는가?)로 조건을 세울 것이다. 그리고 그 반복..

도솔비
등고자비