반응형

구조체를 함수의 인자(파라미터, 매개변수, 인수)로 넘기는 방법.


 #include <stdio.h>

#include <string.h>

struct student //구조체

{

char name[10];

int kor;

int eng;

int math;

double avg;

char grade;

};


struct student ccc(struct student st);

int main()

{

int i;

struct student st;

strcpy(st.name, "hong");

st.kor=95;

st.eng=99;

st.math=97;

st.avg=(st.kor+st.eng+st.math)/3;

st.grade='A';

//함수로 넘어가기전 출력

printf("함수로 넘어가기 전 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);

st=ccc(st);

//함수 호출 후 출력

printf("함수 호출 후 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);



return 0;

}


struct student ccc(struct student st)

{

strcpy(st.name, "kim");

st.kor=80;

st.eng=80;

st.math=80;

st.avg=(st.kor+st.eng+st.math)/3;

st.grade='B';

//함수 내부에서 출력

printf("함수 내부 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);


return st;

}




구조체를 함수의 인자로 넘기고, 반환값으로 받고 이렇게 하니 원하는 값이 나오네요.


만약에 반환값으로 받지 않고 바로 출력문을 사용한다면?

st=ccc(st); 이 부분을

그냥 ccc(st)로 수정

함수 내부에서만 작업하고 끝낼 것인지, 다시 값을 반환하여 사용해야 될 것인지.

확실히 구분 지어 사용해야 되겠습니다.

로컬변수와 지역변수처럼...



위 소스는 구조체 변수 st를 메인함수에서 선언 한 것이고,

student구조체를 정의 하면서 구조체 변수 까지도 선언하면 어떨까요?

#include <stdio.h>

#include <string.h>

struct student //구조체

{

char name[10];

int kor;

int eng;

int math;

double avg;

char grade;

}st;


void ccc();

int main()

{

int i;

strcpy(st.name, "hong");

st.kor=95;

st.eng=99;

st.math=97;

st.avg=(st.kor+st.eng+st.math)/3;

st.grade='A';

//함수 호출 전

printf("함수 호출 전 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);

ccc();

//함수 호출 후 

printf("함수 호출 후 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);



return 0;

}


void ccc()

{

strcpy(st.name, "kim");

st.kor=80;

st.eng=80;

st.math=80;

st.avg=(st.kor+st.eng+st.math)/3;

st.grade='B';

//함수 내부에서 출력

printf("함수 내부 : %s %d %d %d %lf %c\n",st.name, st.kor, st.eng, st.math, st.avg, st.grade);


}



결과는 같습니다.

하지만 소스는 많이 다르지요.

처음 소스와 차이점을 잘 살펴 보세요

함수의 인자, 리턴값 등이 없는 void 형태의 함수이지만.

함수 호출 후에는 확실이 구조체 내부의 값이 변경되었습니다.

마치 전역변수를 사용 하였을 때 처럼. 어느 함수에서나 접근이 가능하게 된 것입니다.


메인함수에서 구조체 변수 st를 선언하고 두번 째 소스와 같이 사용하면 에러가 발생합니다.

st를 찾을 수 없기 때문이죠.



반응형

'Computer > Programing' 카테고리의 다른 글

c언어 구조체를 포인터로..  (4) 2013.12.31
c언어 구조체  (0) 2013.12.28
c언어 문자열(2) _ 문자열 관련 함수  (0) 2013.12.26

+ Recent posts