구조체를 함수의 인자(파라미터, 매개변수, 인수)로 넘기는 방법.
#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를 찾을 수 없기 때문이죠.
'IT > Programing' 카테고리의 다른 글
c언어 구조체를 포인터로.. (4) | 2013.12.31 |
---|---|
c언어 구조체 (0) | 2013.12.28 |
c언어 문자열(2) _ 문자열 관련 함수 (0) | 2013.12.26 |