본문 바로가기

프로그래밍 언어/C언어

C언어 - 포인터 기초 포인터가 C언어의 꽃이라 불릴 정도로 중요한 이유는... 포인터를 이용하여 메모리에 "직접 접근"이 가능하다. 이외에도 많은 장점들이 있으니 공부하면서 차근차근 알아보자. 1. 포인터 변수 선언 방법 데이터 타입과 변수 사이에 별표 * 를 추가하여 포인터 변수를 선언한다. char c; //문자형 변수 c를 선언 char *c; //문자형 포인터 변수 c를 선언 int a; //정수형 변수 a를 선언 int *a; //정수형 포인터 변수 a를 선언 2. 변수선언 및 값 할당 메모리 그림 포인터 변수는 메모리 번지를 다루는 변수이며 즉 포인터는 메모리 번지라는 말이다. 이렇게 해서 b를 출력한다면 1이 출력되지만, 다음과 같이 p를 출력한다면 108번지에 저장된 a의 메모리 주소인 100이 출력된다. 주소.. 더보기
C언어 - static 함수가 몇 번 호출되었는지 알려주는 함수를 작성해보자. #include void cnt() { int b; b += 1; printf("%d\n", b); } int main() { cnt(); cnt(); } 위 코드를 실행해봤을 때 b가 초기화가 되어있지 않다는 오류가 발생한다. #include void cnt() { int b=0; b += 1; printf("%d\n", b); } int main() { cnt(); cnt(); } 하지만 이렇게 b를 0으로 초기화한다면 우리는 호출한 함수의 횟수를 누적할 수 없게된다. 그렇다면.. #include int b = 0; void cnt() { b += 1; printf("%d\n", b); } int main() { cnt(); cnt(); } 이렇.. 더보기
C언어 - 전역변수, 지역변수 main()함수에서는 5를 할당한 i를 선언하고 또 다른 함수를 만들어 10을 할당한 j를 선언하여 각 함수에서 출력해보자. #include int getprint(int j) { j = 10; printf("%d\n", j); return 0; } int main() { int i, j = 0; i = 5; printf("%d\n", i); getprint(j); } 가장 일반적이라면 위와 같은 코드로 작성할 수 있다. 이 때 우리는 getprint()함수에 매개변수를 통해 j의 값을 전달해줄 수 있다. 왜냐하면 getprint에서는 j가 선언되어있지않고 main() 함수 범위에서만 사용이 가능하기 때문이다. 한국어 느낌으로 말하자면... i와 j는 main() 지역에서 선언되어있고 매개변수를 통해 g.. 더보기
C언어 - 숫자 표현 범위 아래의 코드를 살펴보자. #include int main() { int s = 0; int i; for (i = 1; i 더보기
C언어 - 배열 문법 이전 글에서 작성한 코드를 기반으로 배열의 문법에 대해서 공부해보자. #include int ten(int k) { int j; int b = 1; for (j = 0; j < k; j++) b *= 10; return b; } int digit(char a[4], int n) { int i; int b = 1; int s = 0; for (i = 0; i < n; i++) { a[i] -= '0'; b = ten(n - i - 1); s = s + a[i] * b; }return s; } int main() { int s; int n = 4; char a[4] = { '1', '2', '3', '4' }; s = digit(a, n); printf("%d", s); } 첫 번째. 그래서 코드를 다시한번.. 더보기
C언어 - 배열과 함수 이전 글에서 작성한 최종 코드이다. #include int main() { int i, b=0, s=0; char a[4] = { '1', '2', '3', '4' }; for (i = 1; i 더보기
C언어 - 배열의 시작 배열을 쓰는 이유는?! 같은 타입의 데이터들을 묶음으로써 간편하게 관리할 수 있기 때문이다. (아래의 내용을 공부한다면 대충 눈치챌 것이다. ㅋㅋㅋ) 이전 글에서 다룬 코드를 배열 코드로 작성해보았다. #include int main() { char a, b, c, d; a = '1'; b = '2'; c = '3'; d = '4'; printf("%c", a); printf("%c", b); printf("%c", c); printf("%c", d); } #include int main() { char a[4]; a[0] = '1'; a[1] = '2'; a[2] = '3'; a[3] = '4'; printf("%c", a[0]); printf("%c", a[1]); printf("%c", a[2]);.. 더보기
C언어 - 아스키코드 메모리에 저장할 수 있는 값은 0과 1, 이진수만 저장할 수 있다. 그렇다면 알파벳 문자(a, b, c...), 아라비아 숫자(1, 2, 3...)는 어떻게 저장할까? 알파벳 문자와 아라비아 숫자를 메모리에 직접 저장할 수는 없기에 특정 문자에 해당하는 숫자를 미리 정해 놓고(약속해 두고), 메모리에는 실제로 그 숫자를 저장한다. Ex) 숫자 '0'은 48, 알파벳 'A'는 65 라고 약속한다. 아스키 표 특정 문자에 해당하는 숫자를 정하는 방식이 컴퓨터마다 다르면 곤란하기에 대응되는 표를 만들어서 모든 컴퓨터가 아스키 표를 따른다. 아래의 표와 같이 아스키코드는 탭 키나, 리턴 키, 벨 소리를 출력하는 값 등 많은 값을 담아내고 있다. (한글도 아스키코드가 있다!) < 아스키코드는 절대 외울 필요가 없.. 더보기