인프런 커뮤니티 질문&답변

khb4435님의 프로필 이미지
khb4435

작성한 질문수

홍정모의 따라하며 배우는 C언어

10.8 두 개의 포인터로 배열을 함수에게 전달해주는 방법

포인터 연산

작성

·

267

1

#define _SRT_SECURE_NO_WARNINGS

#include <stdio.h>

double average(double*, double*);

int main(void)

{

    double arr1[5] = { 10,13,12,7,8 };

    printf("Avg=%f", average(arr1,arr1+5));

    return 0;

}

double average(double* start, double* end)

{

    int count = 0;

    double avg = 0.0;

    while (start < end)

    {

        avg += *start++; //여기 이거요

//*start++ 라는건 일단 *start값을 avg에 넣고 *start의 값이 1증가되는거 아닌가요 그러니까 10이 11이 되는거 아닌가요? 이렇게 생각됬는데

교수님은 배열의 다음원소로 찍게 된다고 하시네요

이 부분 잘 이해가 안갑니다!!!!

        count++;

    }

    avg /= (double)count;

    return avg;

}

답변 1

0

https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
에서 Operator precedence 를 참고하시면 좋을 것 같네요.
*(dereference operator)가 증감연산자보다 precedence가 낮습니다.
때문에 증감연산자가 먼저 적용되고, *이 나중에 적용됩니다.

배열의 다음원소를 찍게된다는 내용은
바로 다음 강의에서 다루어주시네요. 이미 보셨을 것 같지만..
포인터에서 덧셈뺄셈을 할때,
Data *ptr 에서
ptr= ptr + n 이면

실제 연산은..
ptr = ptr+sizeof(Data)*n 가 들어갑니다.

khb4435님의 프로필 이미지
khb4435

작성한 질문수

질문하기