본문 바로가기

반응형

Programming/C

(10)
[C언어] 25장-2. 메모리의 동적 할당 전역변수와 지역변수로 해결이 되지 않는 상황 malloc은 메모리공간을 할당할 때 사용하는 함수 [잠시 변수 할당] 1. 지역변수일 경우 ReadUserName : 이름을 입력받고 입력받은 이름을 반환하는 함수 main : ReadUserName의 주소값을 반환해 출력 -> 문자열을 입력받기 위한 메모리 공간이 필요하다. 작동 순서 1. 메모리 공간 할당 2. 입력 3. 반환 -> name2의 출력이 끝났을 때 name1이 가리키는 것 : 첫번째로 입력한 문자열 name2가 가리키는 것 : 두번째로 입력한 문자열 -> ReadUserName()을 name1에 반환 -> name은 지역변수이므로 return과 동시에 소멸한다. -> name1에는 소멸된 변수를 가리킨다. [에러 : 출력은 될수도 있지만 잘..
[C언어] 25장-1. C언어의 메모리 구조 25장. 메모리 관리와 메모리의 동적 할당 1. 메모리 구조 작성하는 프로그램의 성격에 따라 하드웨어를 고려해야 하는 경우가 있다. -> CPU를 고려하는 상황: 5% -> 메모리를 고려하는 상황: 95% 메모리 관리의 중요성 [C언어의 메모리 구조] -> 운영체제에 의해 할당된 메모리 공간 C언어를 이용해 APP을 개발하고 실행하면 우리가 실행을 요청하고 운영체제가 실행을 한다. 프로그램을 실행하면 메모리 공간에 할당이 된다. 메모리 공간은 효율적으로 사용하기 위해 -> 메모리 공간을 나눠서 유사한 성향의 데이터를 묶어서 저장을 한다. [관리의 편의성과 속도의 향상] 코드영역 실행할 프로그램의 코드가 저장되는 메모리 공간 CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행 데이터 영역 전역변수와..
[C언어] 프로젝트 7. 동물 뒤집기 선수 과목 다차원 배열 기본 다차원 배열 접근 다차원 배열 선언 다차원 배열 사용 #include #include //10마리의 서로 다른 동물 (각 카드 2장씩) //사용자로부터 2개의 입력값을 받아서 -> 같은 동물 찾으면 카드 뒤집기 //모든 동물 쌍을 찾으면 게임 종료 //총 실패 횟수 알려주기 int arrayAnimal[4][5]; //카드 지도 (20장의 카드) int checkAnimal[4][5]; //뒤집혔는지 여부 확인 char * strAnimal[10]; //동물의 이름 캐릭터 포인터형 //char* cPtr = "테스트"; //테스트라는 글자의 주소를 가진다, 쉽게 접근가능 void initAnimalArray();//동물 배열 void initAnimalName(); void ..
[C언어] 프로젝트 6. 물고기 키우기 선수 과목 주소값 포인터 또다른 포인터 배열과 포인터의 관계 Swap 포인터로 배열 값 변경하기 #include #include //물고기가 6마리가 있다 //이들은 어항에 살고 있는데, 사막이에요 //사막이 너무 더워서, 너무 건조해서 물이 아주 빨리 증발을 해요 //물이 다 증발하기 전에 부지런히 어항에 물을 줘서 물고기를 살려주세요 //물고기는 시간이 지날수록 점점 커져서 .. 나중에는 매운탕을 해먹을수있어요... int level; int arrayFish[6]; int *cursor; //물고기를 가리키는 역할 (미션맨) void initData(); void printFishes(); void decreaseWater(long elapsedTime); int main(void) { long s..
[C언어] 프로젝트 5. 아빠는 대머리 게임 선수과목 배열 기초 값 설정 문자 vs 문자열 문자열 심화 아스키 코드 #include #include int main(void) { srand(time(NULL)); printf("\n\n === 아빠는 대머리 게임 ===\n\n"); int answer; //사용자 입력값 int treatment = rand()% 4; //발모제 선택 (0~3) int cntShowBottle = 0; //이번 게임에 보여줄 병 개수 int prevCntShowBottle = 0;// 앞 게임에 보여준 병 개수 //서로 보여주는 병 개수를 다르게 하여 정답률 향상 //3번의 기회 (3번의 발모제 투여 시도) for (int i = 1; i 2,3) } while (cntShowBottle == prevCntShowB..
[C언어] 프로젝트 4. 비밀번호 마스터 선수과목 계산기 함수의 형태 반환값이 없는 함수 반환값이 있는 함수 전달값이 없는 함수 전달값이 있는 함수 반환값과 전달값이 있는 함수 함수를 이용한 계산기 #include #include int getRandomNumber(int level); void showQuestion(int level, int num1, int num2); void success(); void fail(); int main(void) { //문이 5개가 있고, 각 문마다 점점 어려운 수식 퀴즈가 출제 (랜덤) //맞히면 통과, 틀리면 실패 srand(time(NULL)); int count = 0; //맞힌 문제 개수 for (int i = 1; i
[C언어] 프로젝트 3. 숫자 맞히기 선수과목 Up & Down if else break continue and or 랜덤 switch case #include #include int main(void) { srand(time(NULL)); int num = rand() % 100 + 1;//1~100 사이의 숫자 printf("숫자:%d\n",num); int answer = 0; //정답 int chance = 5; //기회 /*while (chance > 0)*/ while(1) //1:참, 0:거짓 { printf("남은 기회 %d번 \n", chance--); printf("숫자를 맞혀보세요 (1~100) : "); scanf_s("%d", &answer); if (answer > num) { printf("DOWN ↓\n\n");..
[C언어] 프로젝트 2. 피라미드를 쌓아라 선수 과목 증가 연산자 for while do while 이중 반복문 (구구단) 이중 반복문 (별) 이중 반복문 (오른쪽 정렬 별) #include int main(void) { //피라미드를 쌓아라 /* * *** ***** ******* */ int floor; printf(" 몇 층으로 쌓겠느냐?"); scanf_s("%d", &floor); for (int i = 0; i < floor; i++) { for (int j = i; j < floor - 1; j++) { printf(" "); } for (int k = 0; k < i * 2 + 1; k++) //핵심 조건 { printf("*"); } printf("\n"); } return 0;

반응형