Language/C

· Language/C
(1) 전위 연산자 전위 연산자 ++변수, --변수 증감 이후에 해당 문장을 실행 (2) 후위 연산자 후위 연산자 변수++, 변수-- 해당 문장을 실행하고 증감 (3) printf 출력 순서 컴파일러에 따라 다르지만, 기본적인 컴파일러에 의하면 printf 함수는 뒤에서부터 값을 배정한다. 이게 무슨 말인가 하면, 아래의 예제를 통해 알아보자. #include int main() { int i = 5; printf("%d %d %d %d", i++, ++i, i++, ++i); return 0; } 위와 같은 코드에서 서식 지정자인 %d의 출력을 위해서 i의 증감 연산자의 계산이 필요하다. 그런데 사전에 학습한 증감 연산자를 이용하여 앞에서부터(=>) 연산하면 5, 7, 7, 9로 계산할 수 있다. 그러..
· Language/C
(1) 인수 전달 방법 함수를 호출할 때에는 함수에 필요한 데이터를 인수(argument)로 전달해 줄 수 있다. 인수를 전달하는 방법은 크게 두 가지가 있다. 값에 의한 전달 (call by balue) 참조에 의한 전달 (call by reference) (2) 값에 의한 전달 (call by value) 인수로 전달하는 값을 함수 내의 매개 변수에 복사하는 방식이다. 이러한 방식은 원본 변수와 복사된 값인 매개 변수는 별개의 변수이다. 따라서 매개 변수의 값 변경은 원본 변수에 영향을 미치지 않는다. #include void local(int); int main(void) { int var = 10; printf("var의 초기값은 %d\n", var); local(var); printf("loca..
· Language/C
(1) 포인터 연산 포인터는 값을 증가시키거나 감소시키는 등의 제한된 연산만이 가능하다. C언어 포인터 연산에는 다음과 같은 규칙이 있다. 포인터끼리 덧셈, 곱셈, 나눗셈은 의미 없음 포인터끼리 뺄셈은 두 포인터 사이의 상대적 거리 포인터에 정수의 덧/뺄셈은 가능하지만, 실수와의 연산은 허용치 않음 포인터끼리 대입, 비교 가능 포인터 연산의 증가값을 비교하는 예제이다. char* ptr_char = 0; int* ptr_int = NULL; double* ptr_double = 0x00; printf("ptr_char가 가리키는 주소값은 %#x입니다.\n", ptr_char); printf("ptr_int가 가리키는 주소값은 %#x입니다.\n", ptr_int); printf("ptr_double가 가리..
· Language/C
(1) 구조체 배열 선언 사용자 정의 타입인 구조체도 배열의 한 요소가 될 수 있다. struct student highschool[3] = { {"김철수", 1, 7}, {"박짱구", 3, 2}, {"맹구글", 2, 1} }; puts("전학생들의 이름은 다음과 같습니다."); printf("%s, %s, %s", highschool[0].name, highschool[1].name, highschool[2].name); 위와 같이 멤버 연산자 .을 사용하여 각 배열 요소의 멤버 변수에 접근할 수 있다. 이는 이차원 배열에도 동일하게 사용 가능하다. (2) 구조체를 가리키는 포인터 // 문법 struct 구조체이름* 구조체포인터이름; // 예시 struct student* ptr_student; 배열의..
· Language/C
(1) 구조체 (Structure Type) 구조체란 사용자가 C언어의 기본 타입을 이용해 새롭게 정의할 수 있는 사용자 정의 타입이다. 배열은 같은 타입의 변수들을 하나로 묶지만, 구조체는 타입이 다른 변수들을 하나로 묶는다. 이러한 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(memeber variable)라고 한다. (2) 구조체의 정의와 선언 구조체는 아래와 같이 struct 키워드를 사용하여 정의한다. // 문법 struct 구조체 이름 { 멤버변수1타입 멤버변수1이름; 멤버변수2타입 멤버변수2이름; ... }; 위와 같이 struct 키워드를 사용하여 구조체를 정의할 수 있다. 중괄호의 마지막에 세미콜론을 작성하는 것을 잊지 말자. 이렇게 정의된 구조체 타입은 구조체 ..
· Language/C
(1) 자료형 자료형(data type)이란 저장되는 데이터의 종류에 따른 형태로, 저장되는 값의 종류와 범위에 따라 다르게 사용한다. 자료형 크기 (byte) 범위 정수 signed short 2 -32,768 ~ 32,767 int 4 -2,147,483,648 ~ 2,147,483,647 long 4 -2,147,483,648 ~ 2,147,483,647 long long 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 unsigned unsigned short 2 0 ~ 65,535 unsigned int 4 0 ~ 4,294,967,295 unsigned long 4 0 ~ 4,294,967,295 unsigned long long 8 0 ~..
· Language/C
(1) 포인터, 포인터 변수 포인터(pointer)는 변수의 주소를 말한다. 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라고 한다. 간접 연산자 *는 "포인터 선언"의 의미와, "해당 포인터가 가리키는 주소의 실제 값"이란 두 가지 의미로 해석한다. (2) 포인터 변수 선언 포인터 변수를 선언할 때는 자료형, 간접 연산자 *, 변수명을 붙인다. int *a; // a는 int형 포인터 변수이다. 포인터 변수에 주소를 저장하기 위해, 변수의 주소를 찾을 때는 변수 앞에 번지 연산자 &을 붙인다. a = &b; // 변수 b의 주소를 변수 a에 저장한다. 실행문에서 포인터 변수에 간접 연산자 *를 붙이면, 해당 포인터 변수가 가리키는 주소의 값을 의미한다. c = *a; // 변수 c는 포인터 변수..
· Language/C
(1) 변수 변수(Variable)란 값을 저장하기 위해 이름을 할당받은 메모리 공간이다. 변수에 저장한 데이터 값은 언제든지 변경될 수 있다. 변수마다 정해진 자료형이 있고, 각각 할당된 값을 가진다. 모든 변수는 정해진 이름이 있고, 변수명을 정의할 때는 지켜야 하는 규칙이 있다. 모든 변수는 사용되기 전에 선언한다. 영문자 또는 언더바(_)로 시작해야 한다. 중간에 숫자나 언더바(_)를 섞을 수 있다. (이외의 특수문자는 사용 불가) 대소문자를 구별해야 한다. 예약어*로는 사용이 불가하다. * 예약어란 프로그래밍 언어에서 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어들이다. (예: void, int, char 등...) (2) 변수 선언 변수 선언은 말 그대로 변수라는 메..
개발 박살내기
'Language/C' 카테고리의 글 목록