ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 = &num;
    	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;
    }
    

     

    반응형

    댓글

Designed by Tistory.