(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로 계산할 수 있다. 그러..
🍉 2023년 1회 2번 출력 결과 #include int main() { char a[] = "Art"; char *p = NULL; p = a; int i = 0; printf("%s\n", a); printf("%c\n", *p); printf("%c\n", *a); printf("%s\n", p); for(int i = 0;a[i] != '\0';i++) { printf("%c", a[i]); } } 더보기 답 : Art A A Art Art p = a에서 배열 변수 a의 주소값을 포인터 변수 p가 가리키게 된다. printf("%s\n", a) => a의 주소값에서 문자열을 출력한다. 즉, Art printf("%c\n", *p) => *p는 a의 실제값에 대한 문자를 출력한다. 즉, A pri..
🍉 2022년 1회 14번 출력 결과 // 입력값이 5일 때 출력값 #include int fn(int a) { if(a ② % ③ / number의 값인 1234를 역순인 4321로 출력하는 코드이다. 이를 위해선 아래와 같은 일련의 과정을 반복한다. 1. result의 현재 값에 10배 연산을 해준다. 2. result의 값에 number의 값을 10으로 나눴을 때의 나머지 값을 더해준다. 3. number의 값에서 1의 자리의 값을 버릴 수 있도록 10으로 나눠준다. 🍉 2022년 2회 8번 출력 결과 #include struct student { int n, g; }; int main() { struct student st[2]; int i = 0; for(i;i < 2;i++) { st[i].n..
🍉 2021년 1회 15번 출력 결과 #include void main() { struct insa { char name[10]; int age; } a[] = {"Kim", 28, "Lee", 38, "Park", 41, "Choi", 30}; struct insa *p; p = a; p++; printf("%s\n", p->name); printf("%d\n", p->age); } 더보기 답 : Lee 38 사용자 정의 타입으로 insa라는 구조체를 선언함과 동시에 a라는 구조체 배열을 생성하여 값을 할당한다. 또한 동일하게 insa 타입으로 *p라는 포인터 변수를 생성한다. insa 구조체로 만든 배열 a의 주소를 p 변수에 할당한다. 이 때, p = a에서 배열 a는 메모리 상에서 배열 요소 중 ..
🍉 2020년 1회 12번 출력 결과 #include void main() { int i, j; int temp; int a[5] = {75, 95, 85, 100, 50}; for(i = 0;i a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for(i = 0;i < 5;i++) { printf("%d ", a[i]); } } 더보기 답 : 50 75 85 95 100 i는 0~3까지 반복하고 j는 4-i만큼 반복한다. 버블 정렬(Bubble Sort, 인접한 두 요소를 비교하여 정렬하는 방법)을 이용하였다. 현재 요소와 다음 요소를 비교했을 때, 현..
(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..
(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가 가리..
(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; 배열의..