언어 자료구조 알고리즘/디딤돌 C언어

[정답] 디딤돌 C언어 49. 간접 연산자

언제나휴일 2016. 5. 1. 07:59
반응형

[정답] 49. 간접 연산자


간접 연산자


기본 연습

1. 다음 3단계를 수행하는 코드를 작성하세요
    a. char
형식 변수 c 선언하고 char 형식 원소로 하는 포인터 변수 p 선언한 후에 변수 c 주소를  p 초기값으로 설정하세요
   b.
포인터 변수  p 간접 연산을 이용하여 'A' 대입하세요
   c.
그리고 변수 c 문자를 출력하세요.  
:
//char 형식 변수 c 선언, char 포인터 변수 p 선언 변수 c 주소로 초기화
//포인터 변수  p 간접 연산을 이용하여 'A' 대입
//변수 c 문자를 출력
#include <stdio.h>
int main(void)
{
    char c;
    char *p = &c;
    *p = 'A';
    printf("%c\n",c);
    return 0;
}
 
실행 결과
A

 

2. 다음 3단계를 수행하는 코드를 작성하세요.
    a. int
형식을 원소로 하고 원소 개수가 5 배열 arr 선언하시오.
       
그리고 int 형식의 포인터 변수 p 선언하고 arr 초기화하시오.
        int
형식의 변수 index 선언하시오.  
 
     b. index
변수를 0에서 5보다 작을 동안 순차적으로 증가하면서 다음을 수행하시오.  
        
포인터 변수 p index 더하기 연산한 결과에 간접 연산을 이용하여 배열의 원소에 1, 2, 3, 4, 5 값을 설정  
     c. index
변수를 0에서 5보다 작을 동안 순차적으로 증가하면서 다음을 수행하시오.   
         
배열 이름 arr index 더하기 연산한 결과에 간접 연산을 이용하여 배열의 원소 값을 출력
:
//int 형식을 원소로 하고 원소 개수가 5 배열 arr 선언
//int 형식의 포인터 변수 p 선언하고 arr 초기화
//int 형식의 변수 index 선언
//index 변수를 0에서 5보다 작을 동안 순차적으로 증가하면서 다음을 수행
//포인터 변수 p index 더하기 연산한 결과에 간접 연산을 이용하여 배열의 원소에 1, 2, 3, 4, 5 값을 설정
//index 변수를 0에서 5보다 작을 동안 순차적으로 증가하면서 다음을 수행
//배열 이름 arr index 더하기 연산한 결과에 간접 연산을 이용하여 배열의 원소 값을 출력
 
#include <stdio.h>
int main(void)
{
    int arr[5];
    int *p = arr;
    int index;
    for (index = 0; index < 5; index++)
    {
        *(p + index) = index + 1;
    }
 
    for (index = 0; index < 5; index++)
    {
        printf("%d ", *(arr + index));
    }
    printf("\n");
   
    return 0;
}
 
실행 결과
1 2 3 4 5

 

3. 아래와 같이 10명의 성적을 기억하는 배열 scores 선언하였다.
    int scores[10]={90,38,45,67,98,87,88,20,98,85};
   
그리고 다음과 같이 포인터 변수 p scores 초기화하였다.
    int *p = scores;  
   
반복문과 조건문과 포인터 변수와 더하기 연산, 간접 연산을 이용하여 최대값이 있는 원소가 번째 원소인지 판단하는 코드를 작성하시오.  
:
//int scores[10] = { 90,38,45,67,98,87,88,20,98,85 };
//int *p = scores;
//반복문과 조건문과 포인터 변수와 더하기 연산, 간접 연산을 이용
//최대값이 있는 원소가 번째 원소인지 판단하는 코드
#include <stdio.h>
int main(void)
{
    int scores[10] = { 90,38,45,67,98,87,88,20,98,85 };
    int *p = scores;
    int *max_p;
    int *last_p1 = scores + 10;
 
    max_p = p;//최대값이 있는 위치를 앞으로 설정
    p++;
    for (p++; p < last_p1; p++)
    {
        if (*p > *max_p)//p 가리키는 곳이 크면
        {
            max_p = p;//최대값이 있는 위치를 변경
        }
    }
 
    printf("최대값이 있는 위치는 %d번째\n", max_p - scores + 1);
 
    return 0;
}
 
실행 결과
최대값이 있는 위치는 5번째


본문 49. 간접 연산자


반응형