전체 글(49)
-
동적 메모리 할당
정적/ 동적 메모리 할당 변수나 배열을 선언하면 각각 메모리에 공간을 차지하게 됩니다. 변수는 자료형에 따라, 배열은 자료형과 크기에 따라 차지하고 있는 공간이 달라지게 됩니다. 정적 메모리 할당은 프로그램 작성 중(Compile time, Design time)에 메모리 공간을 지정하게 되고 프로그램 실행 중(Run time)에는 바꿀 수 없습니다. 이와 달리 포인터와 동적 메모리 할당을 하게 되면 프로그램 실행 중 할당되는 메모리를 사용자의 입력값에 따라 바꿀 수 있게 됩니다. 메모리 할당 포인터 변수가 직접 어떤 변수나 배열의 주소값을 받아 사용될 수도 있지만 포인터에 특정 공간의 메모리를 할당시켜 사용할 수도 있습니다. 이를 하기 위해선 먼저 헤더파일을 삽입해줘야 합니다. 이 후 메모리 할당 함수..
2022.02.28 -
포인터 / 포인터 선언 / 초기화 / 연산 / 문자열
다른 언어와 다르게 C언어의 가장 강력한 무기는 바로 포인터입니다. 포인터의 장점 중 하나는 메모리를 효율적으로 다룰 수 있다는 것입니다. 임베디드 분야에서 C언어가 필수인 이유도 메모리 관리가 용이하기 때문입니다. 제가 소스 코드를 작성하면서 많은 양의 데이터를 다루기 위해 배열을 선언한다고 가정합시다. 배열의 크기는 한번 선언하면 이는 중간에 바꿀 수 없습니다. 만일 제가 800byte의 배열을 선언하면 이는 프로그램이 종료될 때까지 메모리에 공간을 차지하고 있습니다. 만약 들어오는 데이터가 일정하게 이 공간을 채우지 못한다면 낭비되거나 또는 공간이 더 필요한 상황이 나타날 수 있습니다. 만일 다루는 데이터 양이 적거나 컴퓨터 성능이 여유롭다면 이런 걱정을 안해도 되겠지만 임베디드에서 사용하는 컴퓨터..
2022.02.28 -
자료형과 해석
C언어에서는 변수를 쓰기 전에 이 변수에 대해 어떤 자료형을 갖고 있고 어떤 변수이름(식별자)으로 사용할지 미리 컴파일러에게 인지를 시켜줘야 합니다. 소스코드 상에서 아래와 같이 사용하며 변수를 선언한다고 얘기합니다. 선언은 일반 변수뿐만 아니라 포인터, 배열, 함수등 여러 종류의 선언이 있습니다. int x; // 'x'라는 변수 이름을 지어주면서 이 변수의 자료형은 int형이라는 의미입니다. char Array[5]; 'Array'라는 배열 이름을 지어주면서 이 배열의 자료형은 char로 char형 변수가 5개 있는 것과 같습니다. 여기서 자료형이라는 것에 대해서 정리하겠습니다. 컴퓨터는 모든 데이터와 명령어들을 최종적으로 0과 1로 표현합니다. 이진법에서 자리가 한칸이라면 그 한칸의 자리에서 표현 ..
2022.02.24 -
2022.02.23 구조체를 활용하여 가족 신상을 입력 받아 출력하는 프로그램을 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12..
2022.02.23 -
2022.02.18 알고리즘 연습
Q1 사용자에게 세 개의 정수 값을 입력 받아서 평균 값을 출력하는 프로그램을 작성하세요. 힌트 입력은 scanf 함수를 사용하고 입력 풀이 1. 입력받을 변수 선언 2. 합계,평균 변수 선언 3. 세 개의 정수 값 입력 ==> 를 프린트 4. 값을 입력 받는다. 5. 합계를 계산한다 6. 평균을 계산한다 7. 평균을 출력한다. #include double Ave(double Array[]) { double ave; ave = (Array[0] + Array[1] + Array[2]) / 3; return ave; } int main() { double Array1[3] = { 0 }; double ave; printf("세 개의 정수값 출력:"); scanf_s("%lf %lf %lf", &A..
2022.02.21 -
2022.02.16 문자열과 배열 (array05, array06)
#include #include void main() { //입력된 문자열을 반대로 출력 char ss[20]; char ww[20] = {NULL}; int len1; printf("문자열을 입력하시오 =>"); gets(ss); len1 = strlen(ss); for (int i = 0; i
2022.02.16