-
[C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 10주차학교 수업/1-1, 1-2 코딩 기초 (파이썬, C) 2020. 11. 3. 19:32반응형
연습문제 안풀었음
연습문제 안풀었음
연습문제 안풀었음
1. p467 그대로 써보기
#include <stdio.h> int main() { int a = 100, b=200; int *p1, *p2; p1 = &a; printf("p1 = &a 후: a = %d, *p1 = %d \n", a, *p1); *p1 = *p1 + 1; printf("(*p1)++ 후: a = %d, *p1 = %d \n",a,*p1); p2 = p1; printf("p2 = p1 후: a = %d, *p1 = %d, *p2 = %d \n",a,*p1,*p2); (*p2)++; printf("(*p2)++ 후: a = %d, *p1 = %d\n\n",a, *p1); printf("&a = %u, &b = %u, b = %d \n", &a, &b,b); printf("p1 = %u, p1-1=%u,*(p1-3) = %d\n", p1,p1-1,*(p1-3)); return 0; }
2. 포인터의 포인터를 선언하고, 포인터와 포인터의 포인터를 출력해보자
#include <stdio.h> int main() { int num = 10; int* p = # int** pp = &p; printf("%d\n",*p); printf("%d\n",**pp); return 0; }
3. 포인터끼리의 비교연산과 대입 연산을 해보자
#include <stdio.h> int main() { int num1 = 10, num2 = 20; int* p1, *p2; p1 = &num1; p2 = &num2; printf("포인터1이 가리키고 있는 주소에 저장된 값: %d\n",*p1); printf("포인터2가 가리키고 있는 주소에 저장된 값: %d\n", *p2); if(p1 != p2) printf("포인터1과 포인터2는 현재 다른 주소를 가리키고 있음\n"); else printf("포인터1과 포인터2는 현재 같은 주소를 가리키고 있음\n"); p2 = p1; printf("\n포인터1이 가리키고 있는 주소에 저장된 값: %d\n",*p1); printf("포인터2가 가리키고 있는 주소에 저장된 값: %d\n", *p2); if(p1 != p2) printf("포인터1과 포인터2는 현재 다른 주소를 가리키고 있음\n"); else printf("포인터1과 포인터2는 현재 같은 주소를 가리키고 있음\n"); return 0; }
4. (p463참고 + swap함수 사용) 함수간 인수 전달에서 주소에 의한 호출이 가능한 프로그램을 작성해보자
#include <stdio.h> void swap(int* x, int* y) { int temp = *x; *x = *y; *y = temp; return; } int main() { int a = 100, b = 200, temp; int* p1, * p2, * p_temp; p1 = &a; p2 = &b; printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); printf("\n>> 포인터를 인자로 받아서 값을 바꾸기 \n"); swap(p1, p2); printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); printf("\n>> 포인터 p1과 p2에 저장된 주소를 바꾸기\n"); a = 100, b = 200; p_temp = p1; p1 = p2; p2 = p_temp; printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); return 0; }
p_temp = p1; p1 = p2; p2 = p_temp; 와 같은 기능 구현하기
#include <stdio.h> void swap(int* x, int* y) { int temp = *x; *x = *y; *y = temp; return; } int* swap2(int* x, int* y) { int* temp = x; x = y; y = temp; int ans[2] = { *x,*y }; return ans; } int main() { int a = 100, b = 200; int* p1, * p2,* p_temp; p1 = &a; p2 = &b; printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); printf("\n>> 포인터를 인자로 받아서 값을 바꾸기 \n"); swap(p1, p2); printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); printf("\n>> 포인터 p1과 p2에 저장된 주소를 바꾸기\n"); a = 100, b = 200; p_temp = swap2(p1, p2); p1 = p_temp; p2 = p_temp + 1; printf(" a = %d, b = %d\n", a, b); printf("*p1 = %d, *p2 = %d\n", *p1, *p2); return 0; }
5. 포인터 변수를 이용하여 배열 원소를 참고해보는 프로그램을 만들어보자(p473 10-6 참고)
#include <stdio.h> int main() { int arr[5] = {1,2,3,4,5}; int* ptr = arr; printf("배열 이름으로 배열 요소 접근 - 값: { "); for(int i=0; i<5; i++){ if(i==0) printf("%d",arr[i]); else printf(", %d",arr[i]); } printf(" }\n포인터 이름으로 배열 요소 접근 - 값: { "); for(int i=0; i<5; i++){ if(i==0) printf("%d",*(ptr+i)); else printf(", %d",*(ptr+i)); } printf(" }\n\n배열 이름으로 배열 크기 계산: %lu\n",sizeof(arr)); printf("포인터 이름으로 배열 크기 계산: %lu\n",sizeof(*ptr)); return 0; }
반응형'학교 수업 > 1-1, 1-2 코딩 기초 (파이썬, C)' 카테고리의 다른 글
[C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 12주차 (0) 2020.11.17 [C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 11주차 (0) 2020.11.10 [C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 8주차 (0) 2020.10.19 [C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 7주차 (0) 2020.10.12 [C 프로그래밍: 새내기를 위한 첫 C 언어 책] 실습 6주차 (0) 2020.10.05