아마, 이 글이 올라갈 시점에는, 저는 부산의 해운대에 가 있을 듯 싶습니다. 이 글은 예약글이기 때문입니다. 오늘은 잠깐 전역변수에 대해서 간단하게 다뤄보겠습니다. 사실, 별로 안 좋다고 언급하긴 합니다만, ps를 하면, 안 쓸 수는 없는 친구입니다. 그걸 안 쓰면, 매개변수를 더 넘겨주고, 귀찮은 처리 몇 번 더 해야 하기 때문입니다. 예제 프로그램을 보도록 하겠습니다. 먼저 a는 main 함수 바깥에 선언되어 있습니다. 이 a는 어디에서든 접근할 수 있어요. 그리고 f와 g를 main 함수에서 호출한 다음에, a 값을 출력합니다. 이 때, a 값은 전역 변수 a 값입니다. f와 g 함수는 위와 같습니다. f에는 a를 선언하지는 않았습니다. 그런데 g에는 매개변수로 a를 넘겼습니다. 그리고 19번째 ..
C언어 검색 결과
드디어 200번째 글입니다. void형 포인터에 대해서 배워봅시다. 보통 우리는 다음과 같이 썼을 거에요. 이것은 무엇을 의미할까요? 일단 p에 15를 넣습니다. p는 메모리에 어딘가에 할당이 되어 있을 겁니다. 그리고 이 p의 주솟값을 a가 들고 있습니다. 예를 들어 p의 주소가 0x80이라면 a는 0x80을 들고 있는 것입니다. 다음에 (*a)++이 있는데요. 이는 (*a) = (*a) + 1을 의미합니다. a를 역참조하면 p가 되므로, 결국 p에 1을 증가시키라는 것과 같습니다. 최종적으로는 p = 16이 될 거에요. a는 int형 자료형을 가르켰어요. void형 포인터는 이와 다르게, 주솟값을 저장하고 있기는 한데, 가리키는 자료형을 모르는 pointer를 의미합니다. 아래 예제를 봅시다. int..
동적 할당은 무엇인가요? 예를 들어, 이런 코드가 있다고 해 봅시다. malloc 함수가 호출되기 전에 메모리 상태는 아래와 같습니다. 처음에 Heap 영역에는 아무 것도 할당되지 않았습니다. 그런데 malloc, 메모리 할당 함수가 호출이 되면, 힙 영역에 무언가를 위한 공간이 만들어 집니다. 그러면 이런 상태가 됩니다. 메모리에 할당된 주솟값을 p가 받고 있습니다. 그러면 stack에 있는 변수 p가 Heap 공간에 할당된 space를 가리킵니다. 이것이, 자동으로 해제가 되면 좋겠습니다만. 그렇지 않아요. 명시적으로 해제를 시켜주지 않으면, (동적으로 할당된 공간은) 프로그램이 끝날 때 까지 메모리에서 사라지지 않습니다. free 함수의 원형은 다음과 같습니다. 그냥 해제할 공간의 주소만 넘겨주면 ..
동적 할당을 할 때, 자주 쓰는 함수 중 하나는 malloc입니다. 오늘은 이 함수에 대해서 간단하게 알아보고, 1차원, 2차원 배열을 어떻게 동적 할당하는지 배워보도록 하겠습니다. 할당할 size를 인자로 받고, void형 포인터를 리턴하는데요. malloc가 리턴한 결과값에 적절하게 형변환을 해야 한다는 것을 의미해요. 이것만 보시면, 무슨 이야기인지 잘 모르실 듯 싶어서, 1차원 배열을 dynamic allocate 하는 걸 예로 들어보도록 하겠습니다. 먼저 아래 프로그램을 보겠습니다. 되게 어려운 것 같지만, 사실 5번째 줄이 핵심입니다. 저는 sizeof(int)에 5를 곱한 것 만큼 공간을 할당했는데요. 이는 5개짜리 int형 자료를 저장할 수 있는 space를 할당했다는 의미입니다. 그러면 ..
이번 시간에는 명령행 인자인, argc와 argv를 해 보도록 하겠습니다. 사실, 이것이 무엇인지 생소할 수도 있습니다. 아래 ls 명령어를 봅시다. Linux에서 ls는 디렉토리에 있는 파일들에 대한 정보를 출력해 주는 명령어인데요. ls 명령어를 썼는데, 여기서 -a라는 옵션을 추가로 주었어요. 즉, 실행 파일을 실행할 때 옵션을 추가로 받을 수 있다는 의미입니다. 오늘은 이것들을 가지고 간단하게 놀아보도록 하겠습니다. 먼저, 다음과 같이 실행을 했다고 생각해 봅시다. 초록색으로 칠한 것은 실행 파일 명입니다. work를 실행을 한 것입니다. 그리고 보라색으로 칠한 것은 옵션을 의미하는데요. 보라색의 갯수는 5개임을 알 수 있습니다. argc는, 이 보라색의 갯수 + 1과 같습니다. 실행 파일명, 명..
최근댓글