9월, 2018의 게시물 표시

C 언어 함수포인터와 함수포인터배열

함수를 인자로 넘겨주기 위해서 사용된다. callback의 개념과 비슷하다고 보면 될 것 같다.. #include <stdio.h> int add(int value1, int value2); int substract(int value1, int value2); int multiply(int value1, int value2); int (*func_array[3])(int, int) = {add, substract, multiply}; int main() {         int (*pfunc_pointer) (int, int) = NULL;         int result = 0;         int value1 = 0;         int value2 = 0;         int type =0;         printf("첫 번째 값은? " );         scanf("%d", &value1);         printf("두 번째 값은? ");         scanf("%d", &value2);         printf("계산 방식(0: 더하기, 1: 빼기, 2: 곱하기)은 ? ");         scanf("%d", &type);         if(type >= 0 && type <= 2)         {          ...

C 언어 더블포인터와 이차원배열의 활용

행과 열의 입력받아서 이차원 배열을 동적으로 할당한후 사용자 인풋을 받는다. 그리고 나서 이차원 배열안에서 최대값과 최소값을 출력해주는 코드 #include <stdio.h> #include <stdlib.h> #include <string.h> void inputForRowCol(int* row, int* col); int** alloc_dyn_intArray(int row, int col); void setValueArray(int** ppResult, int row, int col); void printArray(int** ppResult, int row ,int col); void freeArray(int** ppResult, int row); void getMaxValue(int** ppResult, int row, int col, int* maxVal); void getMinValue(int** ppResult, int row , int col, int* minVal); int main() {         int row = 0, col = 0;         int maxVal = 0, minVal = 0;         int** ppResult = NULL;         inputForRowCol(&row, &col);         ppResult = alloc_dyn_intArray(row, col);         setValueArray(ppResult, row , col);         printArray(ppResult, row, col);         ge...

C 언어 메모리 재할당 realloc() 함수, 초기화 함수 memset() 함수

입력받는 count 변수의 크기가 이전 count보다 값이 크면 배열의 메모리를 count 변수의 크기로 재할당하는 방식의 코드 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() {         int count = 0;         int previousCnt = -1000000000;         int* dynamicIntegerArray = NULL;         int* reallocArray = NULL;         int temp = 0;         do         {                 printf("원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?");                 scanf("%u", &count);                 if(count > 0)                 {                         if(count > previousCnt)                     ...

C 언어 메모리 동적할당 malloc() 함수 메모리해제 free() 함수를 활용

0을 입력하기 전까지 계속해서 학생 수를 받고 학생 당 점수를 입력받아 배열을 관리하며 입력이 끝나면 총점과 평균점수를 출력해주는 코드이다. #include <stdio.h> #include <stdlib.h> void getCountInput(int* count){         printf("학생 수는 ?(0 이하의 수를 입력하면 종료됩니다 :  ");         scanf("%u",count); } void getScoresInput(int* array, int c) {         signed int temp = 0;         for(int i =0; i<c; i++){                 printf("%d 번째 학생의 점수는 ? ",i+1);                 scanf("%u",&temp);                 *(array + i ) = temp;         } } void getSumAndAvg(int* array, int c, int* sum, double* avg) {         for(int i =0; i< c; i++){                 *sum += *(array + i);         }         if( 0 != c)...

C 언어 함수의 활용과 상수 포인터

print_array_reverse는 double형 포인터 변수를 받아 배열의 끝에서 부터 접근해서 출력해주는 함수이다. 여기서 중요한 개념이 있는데, 상수 포인터이다. const double* pArray 는 포인터 변수가 가리키는 변수를 상수화 한다는 의미로 포인터 변수는 다른 주소를 가리킬수 있지만, 가리키고 있는 값을 변경할 수 없게된다. ex) const int* pint_value = &int_value; pint_value = &int_value2;  //가능함!! *pint_value = 10; double* const pArray 처럼 const위치가 바뀐다면 포인터 변수의 상수화로 pArray는 다른 주소를 가리킬수 없게된다. ex)int* const pint_value = &int_value; pint_value = &int_value2; // 오류 발생!! *pint_value = 10;            // 가능함!! #include <stdio.h> void print_array_reverse(const double* pArray, int size); int main() {         double double_array[] = {10.0 , 20.1, 30.2, 40.3};         int size = sizeof(double_array) / sizeof(double);         print_array_reverse(double_array, size);         return 0; } void print_array_reverse(const double* pArray, int size) { ...

C 언어 포인터 변수와 배열 Feat. scanf()

포인터 변수 활용과 사용자 인풋값을 받아 배열에 접근하는 코드 #include <stdio.h> int main() {         int my_int_array[] = {10,20,30,40,50,60,70};         int *pint_value = &my_int_array[0];         int index = 0;         int count = sizeof(my_int_array)/sizeof(int);         printf("인덱스 값은(0~%d)? ",count-1);         scanf("%d", &index);         if ( index >= 0 && index < count ){                 pint_value = pint_value + index;                 printf("인덱스 %d 에 해당하는 값은 %d 입니다. \n", index, *pint_value);         }         else         {                 printf("인덱스 값은 0 보다 크고, %d보다 작아야 합니다. \n", count);         }     ...

C 언어 문자열 함수 strstr() 사용한 문자열 찾기

#include <stdio.h> #include <string.h> int main() {         char str_source[1024] = {0};         char str_find[1024] = {0};         char *pFind = NULL;         int count = 0;         printf("첫 번째 문자열은 ? ");         scanf("%s",str_source);         printf("찾고 싶은 문자열은 ? ");         scanf("%s",str_find);         if(strlen(str_source) <= 0 || strlen(str_find) <= 0 )         {                 printf("공백 문자열은 안되요!\n");                 return 0;         }         pFind = strstr(str_source, str_find);         while (NULL != pFind)         {                 coun...

Nano 에디터 복붙과 잘붙 단축키

Ubuntu 환경에서 c언어 공부하면서 nano에디터로 코드를 작성하고, gcc로 컴파일하고 돌려보고 하는데, 실용적으로 에디터를 사용하기 위해서 복사하고 붙여넣기를 가끔씩 까먹어서 구글링하고 다시 기억하고 해서 이번에 한번 nano에디터 단축키를 정리해보려고 한다..!!  먼저 복사하려면 구간선택을 해야한다. 구간선택 시작부분에 커서를 두고 CTRL + 6 그리고 구간선택 끝부분에 커서를 두고 ALT + 6 그리고 나서 붙여넣기를 하고 싶은 곳에가서 커서를 두고 CTRL + u 를 하면 된다! 구간선택을 하지않고 그냥 한줄 전체를 복사하고 싶을 경우 ALT + 6 그리고 빈줄로 커서를 두고 CTRL + u 를 하면 된다! 복붙 말고 잘라내기 붙여넣기는 구간선택이 없는 것 같다.. 한 줄 단위로 잘라낼 수 있다.   CTRL + k 붙여넣기를 하고 싶은 라인에 가서 CTRL + u 를 하면 된다! 나머지 종료하고 저장하고 하는 것은 너무 간단해서 생략하겠다. 이상 허접의 기록