c언어 입력 받은 배열 더하기 입니다.

입력받은 숫자들의 합을 구하는 프로그램 인데요. 비어있는 함수칸에 malloc()  를 이용해서 구현하고 싶습니다. 어떻게 넣어야 할까요?

'''코드''' int allocate(int num){

}

int main(){

int num2 = -1;
int *int_array;

printf("input: ");
scanf("%d", &num2);
if(num2 <= 0){
    printf("BAD\n");
} else{
    int_array = allocate(num2);
    for (int i=0; i<num2; i++){
        printf("[%d]?",i);
        scanf("%d",&(int_array[i]));
    }
    int sum =0;
    for(int i =0; i<num2; i++){
        sum+=int_array[i];
    }
    printf("result is %d\n", sum);
    free(int_array);
}

} '''코드'''

1답변

  • int* allocate(int n) { int* arr = (int*)malloc(sizeof(int)*n); return arr; }

    num2 가 입력받을 수의 갯수죠?

    적어주신대로 int_array = allocate(num2); 이 코드를 보면 allocate함수가 반환해주는 값은 int* 자료형이라 함수정의부분에 반환값을 int*로 수정했구요.

    malloc함수를 통해 num2의 값만큼 int형 메모리를 할당하고 그 주소값을 (int*)형으로 반환받은 변수가 arr 입니다. 그리고 arr을(배열의 주소값을) return받은 변수가 int_array이구요.

    int main(void) { int num2 = -1; int* int_array;

    printf("input : "); scanf_s("%d", &num2);
    // num2 : 입력받을 수의 갯수
    
    if (num2 <= 0) {
        printf("Bad\n");
    }
    else {
        int_array = allocate(num2); // int_array에 arr의 주소값이 저장된다.
        for (int i = 0; i < num2; i++) {
            printf("[%d]?", i);
            scanf_s("%d", int_array + i);
        }
        int sum = 0;
        for (int i = 0; i < num2; i++) {
            sum += *(int_array + i);
        }
        printf("result is %d\n", sum);
        free(int_array);
    }
    
    return 0;
    

    }

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.