전체 글

하고 싶은 것들을 하며 성공하기
· C언어
1. 문자열 상수 구현 및 방법 1) 문자열은 컴파일러가 특별한 방식으로 다룬다. 문자열은 크기가 일정하지 않다. 따라서 컴파일러가 문자열을 처리할 때 특별한 방법으로 처리한다. 컴파일 과정에서 문자열을 char 배열 형태로 따로 보관하고, 문자열 상수가 있던 곳에는 배열의 위치 값을 사용한다. 예를 들어 문자열 "apple"은 따로 리터럴 영역에 수정할 수 없는 문자열 상수로 저장되고, 이 자리는 'a' 문자가 저장된 메모리의 주소값으로 바뀐다. 2) 문자열이나 문자열을 저장한 포인터를 주소로 접근하여 문자열 자체를 바꿔서는 안 된다. *"apple" = 't' 등으로 첫 번째 문자가 저장된 공간에 다른 문자를 대입해 그 값을 바꾸려는 시도는 위험하다. 연산 자체는 문제가 없어 정상적으로 컴파일 되지만..
· C언어
%c는 scanf 함수에서 사용될 때 알파벳이나 숫자 모양의 문자(단순 정수가 아님) 등 형태가 있는 문자를 입력하지만 공백이나 탭 문자, 개행 문자와 같은 제어 문자도 입력하므로 주의해야한다. tip 다른 함수 사용 다른 함수는 조만간...업로드
· C언어
이 때에는 배열의 저장 공간이 할당되지 않으며, 매개변수로 선언된 배열의 이름은 자동으로 포인터 변수오 바뀐다. 형식은 유지한 체 포인터 변수로 변경된다는 의미이다. 컴파일러는 배열명을 자동으로 포인터로 바꾸고 타 함수에서 선언된 배열의 모든 배열 요소를 사용할 수 있도록 포인터 연산을 수행한다. 그리고 타 함수에서 선언된 배열의 크기는 알 수 없으므로 알고 싶다면 따로 반드시 요소의 개수를 인수로 받아야 한다. 정리하면 배열로 매개변수에 선언하면 크기를 생략하든 어떤 수로 적었든 컴파일러가 자동으로 포인터로 변경한다.
· C언어
처음에 이 문제를 만나서 당황했다. 비트 연산인가..? 3*100 + 8 * 10 + 5 * 1 이렇게 나눠서 하는건가? 등등 고민하다가 결국 간단하게 연산자로 풀 수 있다는 것을 깨달았다. 정답은 가까이에.. #include int main(void) { int a, b; int one, ten, hundred; scanf("%d%d", &a, &b); hundred = b / 100; ten = (b % 100) / 10; one = (b % 100) % 10; printf("%d\n", a * one); printf("%d\n", a * ten); printf("%d\n", a * hundred); printf("%d\n", a * b); return 0; } int형 변수 one, ten, hun..
· C언어
1. 주소와 포인터는 상수와 변수 차이와 같다. 1) 포인터는 변수처럼 공간으로도 사용할 수 있지만, 주소는 상수처럼 정해져 있는 값만 사용할 수 있지 공간으로는 사용할 수 없다. 예를 들면 C언어에서 등호(=) 좌측에 공간이 오고, 등호 우측에는 값이 온다. 이때 주소 값 자체는 좌측(L-value)로 올 수 없다. #include int main(void){ int a = 1; int *pa = &a; // 포인터는 변수와 같아서 L-value로 쓰이는 것이 가능하다. &a = 100; // 주소는 상수 값이라 L-value로 쓰이는 것이 불가능하다. return 0; } (위 예시는 보여주기 위함으로 작성한 것이라 실제 컴파일하면 오류를 가져온다) 2) 둘 다 산술 연산자는 사용 가능하다. 2. 포..
· C언어
1. 프로그램 만들기 1.1 컴파일 과정 3단계 1) 1단계 전처리 사용자가 작성한 소스파일을 처음에 가공하는 과정이다. #include가 전처리 지시자이며 이후에 작성하는 등의 헤더 파일, 즉 라이브러리를 불러올 수 있다. 이로써 외부에 있는 함수를 직접 정의하지 않아도 사용할 수 있다. 전처리 과정은 주로 소스 파일을 컴퓨터에 맞게 편집하는 일이므로 파일의 형태에는 변화가 없습니다. 2) 2단계 컴파일 전처리가 된 소스 파일은 컴파일 과정을 거쳐 기계어로 변환된다. 변환된 것은 개체 파일이라고 하며, CPU가 해석할 수 있는 기계어로 된 명령어들로 이루어져 있지만 바로 실행할 수는 없다. 프로그램은 운영체제에 의해 실행되어서 설치된 운영체제가 인식할 수 있는 형태로 바꿔야 한다. 3) 3단계 링크 이..
· C언어
2. 기억 상자 만들기 - 변수 2.1 숫자 상자 만들기 우리는 어질러진 방을 청소할 때 빈 상자를 찾는다.(제발 찾아줘..) 그리고 장난감, 봄 옷, 가을 옷 등 라벨링(눈 관리)을 하게 되는데 이는 다음에 쉽게 찾기 위해 하는 행동이다. 프로그래밍에서도 비슷한 행동을 하게 되는데 이는 변수를 사용할 때이다. 변수란 변할 수 있는 값이다. 즉, 여러 가지 값을 변수 안에 넣을 수 있다. 이런 개념에서 봤을 때 변수는 빈 상자로, 여러 가지 값을 장난감, 봄 옷, 가을 옷 등에 비유할 수 있다. 그리고 장난감이 들어가는 상자라고 알리기 위해 라벨링 하는 것은 변수의 자료형을 지정하고, 변수의 이름을 지정하는 것과 같은 맥락이라고 이해할 수 있다. 2.2 메모리 상자에 숫자 저장하기: 변수 선언과 초기화 ..
· C언어
1. C 프로그래밍 속으로 1.3 나의 첫 C 프로그래밍 Hello, World 출력하기 #include main(){ printf("Hello, World"); } stdio.h은 h(헤더)라는 이름의 확장자를 가진 파일이다. stdio는 Standard input/output을 의미한다. #include는 이런 헤더 파일을 자신이 작성하고 있는 코드에 포함한다는 의미로 이해해도 된다. 헤더 파일명을 작성해주는 이유는 바로 아래의 printf라는 명령어들을 라이브러리에서 가져오는 것처럼 쉽게 사용하기 위해서다. C언어에서 이런 명령어들을 쉽게 사용할 수 있는 이유는 이 헤더 파일 안에 명령어들의 기능을 누군가 만들어뒀기 때문이다. 1.4 컴파일과 실행: 프로그램의 일생 컴퓨터는 많은 사람들이 똑똑하다고..