좋은질문

C언어 문제

JustineBaek 2014. 9. 27. 00:38

 

 

 

 

제가 학교 과제가 있어서 풀엇는데
과제 내용이
10개의 정수값을 입력 받아 array에 저장하고
pr_array() 라는 함수에서
pointer 를 써서 , 저장된 값을 출력(printf 사용) 한다
라는 과제를 내주셔서 풀엇는데 맞는지 확인좀 부탁드립니다 틀린점 있으면 알려주세요 ㅎㅎ
 
#include<stdio.h>
void pr_array(int*,int);
int main()
{
 int i;
 int a[10];
 int array;
 void (*pf)(int*)=NULL;
 
 for(i=0;i<10;i++)
 {
  printf("정수값을 입력:");
  scanf("%d",&a[i]);
 }
 pf = pr_array;
 pf(&array,a);
 printf("10개의 입력 받은 정수를 array의 저장한 값 : %d\n",array);
 return 0;
}
void pr_array(int* z,int x[10])
{
 *z=x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8]+x[9];
}
 
아그리고 이 코드에 대한설명좀 부탁드립니다  책찾아 보고 풀긴풀었는데
정수값 입력후에 입력한 10개의 숫자가 어째서 pr_array로 들어가는건지 잘모르겠습니다
특히 저기 빨간곳에 a만쓰는이유와    array에만 &쓰는이유
특히 빨간부분 자세히 부탁드립니다 위에꺼말고도
 
 정말궁금합니다 좋은답변부탁드려요 내공만점

 

 

 

 

안녕하세요?

 

1. 위 코드에 대해 아래와 같이 수정을 하였습니다.

    -. void* 까지 쓸 필요를 못느꼈습니다.

    -. pr_array함수는 출력까지 담당해야 한다고 생각했습니다.

    -. 주어진 문제는 a배열에 들어있는 값을 확인하는 것이지, 합계를 구하는게 아닙니다.

 

2. 아래

     #include <stdio.h>

     void pr_array(int* ptr_a, int count);

     int main()
    {
          int i;
          int a[10];              // 이 부분만 바꾸면, 입.출력 횟수를 마음대로 조절가능해 집니다.
          int count;

 

 

             // 배열의 요소 갯수를 구합니다.  

          // 이렇게하면, 위에서 배열 크기가 바뀌어도 함수는 바꿀 필요가 없어집니다. 

          // a배열전체크기 / 첫번째요소크기 (40byte / 4byte) -> 10개

          // a는 int형 배열이고, int는 4byte입니다. 4바이트를 10개 선언했으므로 40바이트.   

          count = sizeof(a) / sizeof(a[0]);     

 

          // 입력 받은 값을 배열에 저장합니다.

          for(i = 0;  i < count;  i++)
          {
               printf("정수값을 입력: ");
               scanf("%d" , &a[i]);       // 이때 입력받은 값이 각각 a배열에 저장됩니다.

          }

    

          // 함수에 배열, 배열크기를 전달하여 내용을 출력합니다.            

          pr_array(a, count);

 

          return 0;
     }

 

     void pr_array(int* ptr_a, int count)
    {
          printf("\n");
          printf("%d개의 입력 받은 정수를 array에 저장한 값 : ", count);


          for(int loop = 0; loop < count; loop++)
          {
               printf("%d ", ptr_a[loop]);     // 배열을 가르키는 포인터는 배열처럼 사용가능.
          }


          printf("\n\n");
     }

 

3. 출력결과

    

 

4. count 부연 설명

   -. pr_array(a, 10);     이렇게 호출을 할 수도 있습니다.

   -. 그런데, 마음이 변하여 int a[10]; -> int a[3];으로 바꾸고 싶어졌습니다.

   -. 이렇게 되면, 10으로 코딩했던 부분을 전부 변경해야 합니다.

   -. 하지만, 위 처럼 코딩을 하면, 단지 배열의 숫자만 바꾸면 모든 것이 정상 작동합니다.

   -. a[3]이면 3번 입력받고, 입력된 3개가 출력될 것이고,

   -. a[6]이면 6번 입력받고, 입력된 6개가 출력될 것입니다.   


   

 

도움이 되시길 바랍니다.

감사합니다.

 

 

 

 

written by

  

legend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C과외/C#과외/VB과외 프로그래밍 과외.서울인천경기-방문강의.기타전국-화상강의.제대로 체계적으로 배우고싶은분들.15년경력 프리랜서.삼성/포스코/한진 등.

서울,인천,경기,분당,일산,과천,산본,부천,부평,평촌,안산,안양,광명,용인,시흥,성남,수원,평택,오산,화성,동탄,천안,아산,

c#프로그래밍1:1과외, 15년 이상 프로젝트 경력의 프리랜서 직접 강의,

c#프로그래밍 과외, c#프로그래밍교육, IT·컴퓨터·컴퓨터과외비·프로그래밍과외, c# 강좌, c# 프로그래밍,

데이터베이스, 데이터베이스 프로그래밍, db, DB, 과외비,컴퓨터1:1,컴퓨터개인지도,컴퓨터실무과외,컴퓨터과외,컴퓨터1:1과외,

서울,인천,경기,부천,안산,분당,일산,천안,과천,산본,안양,광명,평촌,수원,평택,오산,용인,부평,시흥,성남,화성,동탄

광주,부산,대구,대전,마산,창원,울산,전주,군산,원주,강릉,충청남도,충청북도,강원도,경상남도,경상북도,전라남도,전라북도,제주도