C 34

곱씹어보자 C!_#022_삽잡이의 두서없이 막말하는 구조체 예시_둘

안녕하세요 삽잡이입니다.구조체 예시 두번째 시간입니다... 지난시간에 이어 예시를 살펴보는데 어때요 재미있죠...아하하하하하하하하 정줄 놓지 않았습니다.... 죄송합니다... C부려보도록 하겠습니다... 푸하하 이번시간도 마찬가지로 지난 시간부터 주구장창 사용하는요놈... 를 꾸준히 사용하며 설명을 진행해보도록 하겠습니다.안녕~~~ 123456typedef struct _Point { int x; int y;}Point; cs 구조체에서는 오직 딱 하나 '대입' 만이 가능합니다.다른거 안되요... 같은 타입인 경우 대입 즉, 복사가 가능합니다. 이를 메모리 덤프라고도 하죠...이렇게 가능합니다... 1234567891011121314151617void PrintPoint(Point ps[]){ print..

곱씹어보자 C!_#021_삽잡이의 두서없이 막말하는 구조체 예시_하나

갑자기 구조체를 사용하는 이유에 대해서 중얼거리다가 갑자기 예제 코드냐구요? 혹여나 말씀드리자면... 제목과 같이 우선... 두서없이 막말하고요...기초를 다루는 것이 아니라... 아는 것인데 그래도 개인적으로 곱씹어 볼만하거나, 내가 모르는 것들을정리하는 정도로 작성을 하기로 처음에 써놨습니다... 혹여나... 정말 제 자료를 보시는 분들이 없다는 것을 알지만...혹시... 아주 혹씨 궁금해하실까봐요... ㅎㅎ... 아무튼... 마음아프네요...예시들이나 살펴보도록 하져... 1234567891011121314151617181920typedef struct _Point{ int x; int y;}Point; void main(){ Point p1 = { 10, 20 }; printf("p1 : %d\n..

곱씹어보자 C!_#020_삽잡이의 두서없이 막말하는 구조체를 사용해볼까

안녕하세요 삽잡이입니다 지난시간의 구조체를 사용하는 이유에 이어서 달려가봅시다~!아다다다다다~!!! ... c언어에서는 데이터 형식을 두가지로 나눌 수 있습니다.char, int, double 과 같은 기본형식과우리가 구조체를 통해 만드는 사용자 정의 형식 이 두가지말입니다. 지난 시간을 조금만 곱씹어보자면... 우리가 FIFA Online을 만든다고 합시다... 선수 터져서 접은.... 아하하... 별로 게임을 그리 안좋아해요...마음이 아픈... 아무튼... 축구 게임을 만들고 싶다하면 뭐가 필요할까요?선수, 팀, 경기장, 슛, 패스, 크로스 등등등...만들고자 필요한 모든 것들을 문제 도메인에다가 만드는 것입니다. 글씨가 작군요... 그만큼 집중해서 뚫어져라 보시죠...중요한 말은 아닌데... (퍽..

곱씹어보자 C!_#019_삽잡이의 두서없이 막말하는 구조체 사용 이유

오늘은... 어제 정리를 필요로 했던... 구조체에 대해서씨부려봅시다... 욕아니에요... C언어를 부리다.. 씨부리다... ... ... 아무튼... 구조체는 struct라고도 부릅니다.지금까지 우리가 프로그램을 만들면서... 그러니까 코드를 짜면서 사용했던 데이터들은 모두 정수, 실수, 문자열 이런것들이었죠.... 그런데 말입니다, 우리가 예를 들어서 성적 처리 프로그램을 만든다고 가정해보자구요.그럼 머리에 떠올려보세요... 뭐가 필요할까요?우선, 과목 이름도 있어야하겠구... 과목 코드 번호라던지... 성적.... 학번...이런게 필요하겠네요... 이말이 무슨 말이냐하면, 프로그램을 만들어야한다는 문제를 다룰 때 기계어 그러니까 컴퓨터쪽에 보다 가까운 로우 데이터에 대한 생각을 하는 것이 아닌, 인..

곱씹어보자 C!_#018_삽잡이의 두서없이 막말하는 잡다한 것들...

- 연산자 *와 [] 복습하며 까먹지 말아야 할 정리들을 잡다하게 올려봐야겠습니다. 포인터에 대해서 보고 있었는데... *와 []는 같은 기능을 한다고 합니다.즉, * 주소 = 주소 [] 와 같다는 것입니다.이말은 곧... Out Parameter로써 주소값을 인자로 넘길 때에 인자를 받은 함수의 매개변수에 대체적으로 자료형* 로 인자를 받는다는 것이죠... 123456789101112void Input(char* sbuf){//중략} main(){char* buf[100];//중략Input(buf);//중략}cs 요런식으로 말입니다. 그런데 *와 []의 기능은 같으나,관례적으로 연속한 메모리의 집합들을 참조할 때에는 []를 사용한다고 합니다.음... 그러니까 "야... 연속한 메모리들의 집합들이 들어온..

곱씹어보자 C!_#017_삽잡이의 두서없이 막하는 Heap (엉덩이 아님)

죄송합니다... heap 보고 엉덩이라니...죄송합니다.... 아하하.... 아무튼... C언어에서 바라보는 프로그램은 명령어와 데이터로 나뉩니다.그런데 데이터는 우리 사용자에 의해서 저장이 되죠.... 데이터는 크게 세가지의 부분으로 나뉩니다.첫번째, Global Data, 두번째, Stack,세번쨰, Heap 입니다. 왜 나뉘느냐... 바로, 용도에 맞게 적정한 위치에 데이터를 보관하고자 하는 이유에서 입니다.그 중에서, 우리가 알아보고자 하는 영역은 바로 Heap 영역입니다. 그전에 Stack에서 대해서 잠깐 간단하게 설명하자면,Stack은 함수의 중괄호 블럭 시작과 함께 생성되고 종료될 때 소멸되는 공간을 말합니다. 아무튼... 우린 Heap 을 봐야됩니다...Global Data 영역에는 정적 ..

곱씹어보자 C!_#016_삽잡이의 두서없이 막하는 배열 포인터

1234int arr[3] = {4, 2, 3}; int* p; p = arr;cs 위와 같이 선언하고 정의를 하여 포인터 변수를 arr 배열과 같이 사용할 수 있습니다. 하지만 중요한 것은 arr[0]와 p[0]이 같으려면 포인터 변수인 p는 int형 주소를 담는 int* 형이어야 한다는 것입니다. int 형 메모리를 int* 형 포인터는 다 접근할 수 있다 이겁니다. 그렇다면 2차원 배열을 생각해보도록 하겠습니다. 12345int arr[2][3] = {1,2,3, 4,5,6};int* p; p = arr; Colored by Color Scriptercs 2차원 배열도 뭐 까지꺼 똑같이 선언하면 되지 않겠습니까? 아닙니다. 해보세요...왜 안되거나 warning을 발생시킬까요? 형태가 달라서 그렇습..

곱씹어보자 C!_#015_삽잡이의 두서없이 막하는 2차원 배열

안녕하세요 삽잡이입니다~오늘도 폭발적인 하루의 끝인 밤이 찾아왔습니다...요즘 폭발적으로 살고 있습니다...하하... 지금까지 제가 살펴본 배열은 모두 1차원 배열이었습니다. 1차원 배열은 간단하게 말하자면,순차적인 인덱스 하나를 가지고 메모리를 접근하는 방식입니다. 그렇다면, 1차원 배열과 다차원 배열의 차이는 뭘까요?1차원 배열은 논리적으로 표현하면 '순차적' 이고,다차원 배열은 논리적으로 표현하면 '행'과 '열'로 표현해낼 수 있습니다. 다차원 배열은 아마도... 일차적으로 표현하기 힘든 상황들을 위해 만들어진 것 같습니다. 다차원 배열이나 1차원 배열이나메모리는 어차피 선형성을 가지고 있어서 주소가 순차적으로 붙습니다... 그러니까 즉, 뭔 배열이라 해도 컴퓨터는 똑같은거죠...사용자인 우리에게만..

곱씹어보자 C!_#014_ 삽잡이의 두서없이 막하는 예제 코딩

지금까지 주절주절 거리며 떠들었던 것들에 대한 예시들을 살펴보도록 하겠습니다.예제에 대한 설명들은 다 안하고... 그냥 제가 살펴보고 싶은 것만... 하하...쉬운 코드들이라... 그냥 보시는 데에도 문제 없으실 것입니다. 말씀은 안드렸지만, 이번 '곱씹어보자 C!' 기획은...C언어를 아시는 상태에서 한번 훑어보며 기억을 다시한번 잡아보자 하는 마음에 올리게 되기에...아무래도 저의 화려한 삽잡이의 캐릭터와 (ㅋㅋㅋㅋ) 그림들이 없어 밋밋한 면이 있죠... 아무튼... 그 전에 우선 하나 확실하게 다시 알아보고 갑시다. 지난 번에 설명한 것인데요...이번에 올릴 예시들을 이해하는데 도움이 많이 될것 같아서요! 다른 함수로 요청을 할 때에 매개변수를 보낸다고 했었습니다.그런데, 그 매개변수에는 사용하는 ..

[삽잡이::C] 연산자

'* 연산자 + 주소' 는 메모리의 이름이 된다. 즉 *(asterisk) 연산자는 주소 앞에 붙어 해당 주소의 메모리 이름으로 된다. '주소 + [] 연산자' 또한 같은 기능을 담당한다. 즉, '*' 와 '[]' 연산자는 같은 기능을 하나는 것이다. 1234567int arr[] = {1, 2, 3, 4};int* p; p = arr; //arr 즉, 배열의 이름은 배열[0]의 시작주소 printf("p[1]의 값 = %d, arr[1]의 값 = %d\n", p[1], arr[1]); // 서로 같은 값. p는 arr의 주소를 담고 있는데 그렇다면 arr의 주소 1번재 메모리 이름이 되겠다.cs