조무위키
조무위키
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
행위
문서
토론
편집
역사 보기
C언어
편집하기 (부분)
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
===구조체=== 구조체는 쉽게 말하면 너가 원하는 새로운 자료형을 만드는 것 과 같다고 보면된다. 예를들어 학생의 이름과 수학,과학,영어 점수를 저장해야 할 때, 단순히 구조체를 모르는 상황에선 이런식으로 변수를 선언할 것이다. <source lang="cpp"> #include <stdio.h> #define STUDENTS 5 int main() { char s_name[STUDENTS][12]; int s_math[STUDENTS]; int s_science[STUDENTS]; int s_english[STUDENTS]; for (int i = 0; i<STUDENTS; i++) { printf("%d번의 학생의 이름은? : ",(i+1)); scanf("%s", s_name[i]); printf("%s 학생의 수학점수는? : ",s_name[i]); scanf("%d", &s_math[i]); printf("%s 학생의 과학점수는? : ",s_name[i]); scanf("%d", &s_science[i]); printf("%s 학생의 영어점수는? : ",s_name[i]); scanf("%d", &s_english[i]); } for (int i = 0; i<STUDENTS; i++) { printf("%s\n", s_name[i]); printf("수학 : %d\n",s_math[i]); printf("과학 : %d\n",s_science[i]); printf("영어 : %d\n",s_english[i]); } return 0; } </source> 구조체를 안쓴상태에서 간단히 짜보았을때 이런 형태를 띌 것이다. 간단한 예제이므로 단순히 입력받고 출력할 뿐인 형태지만 변수 배열 4개를 선언하고 각각에 집어넣는 식이다. 배열첨자를 학생번호로 사용하여 접근할 수 있는데 구조체를 사용하면 좀 더 간결하고 관련된 변수들을 모아 하나의 자료형을 만들어준다 예를들어 위의 예제를 구조체로 만든다면 <source lang="cpp"> #include <stdio.h> #define STUDENTS 5 typedef struct _STUDENT { char name[12]; int math; int science; int english; } Student; int main() { Student students[STUDENTS]; for (int i = 0; i<STUDENTS; i++) { printf("%d번의 학생의 이름은? : ", (i + 1)); scanf("%s", students[i].name); printf("%s 학생의 수학점수는? : ", students[i].name); scanf("%d", &students[i].math); printf("%s 학생의 과학점수는? : ", students[i].name); scanf("%d", &students[i].science); printf("%s 학생의 영어점수는? : ", students[i].name); scanf("%d", &students[i].english); } for (int i = 0; i<STUDENTS; i++) { printf("%s\n", students[i].name); printf("수학 : %d\n", students[i].math); printf("과학 : %d\n", students[i].science); printf("영어 : %d\n", students[i].english); } return 0; } </source> 이렇게 할 수 있다 뭔소린지 몰라도 괜찮다 일단 밑의 설명을 보고 다시 위 예제를 보면된다. 일단 단순히 아까 4개의 배열이 students 라는 하나의 배열로 묶여진 것만 확인하면 된다. 구조체는 여러 변수들을 하나로 모아 새로운 자료형을 만들 수 있는데 그냥 구조체 자료형이라고 해도 되지만 몇몇 사람들은 사용자 정의 자료형이라고도 부른다. 선언 방법은 struct 키워드로 시작하는데 <source lang="cpp"> struct 구조체이름 { 저장할 변수; }; </source> 로 만들 수 있다 이렇게 만든 구조체로 변수 선언을 할때는 struct 구조체이름 변수이름; 원래는 이렇게 선언하고 struct를 붙이는게 싫다면 구조체 선언시 typedef를 쓰면 되는데 VC컴파일러로 cpp확장자 써놓고 걍 struct 무시하고 쓰더라 요즘 표준은 모르겠는데 일단 struct 안붙이면 에러나는 컴파일러도 있으니 확실히 명시해주는편이 좋다. 참고로 typedef란 자료형의 이름을 새로 정의할 수 있다. (새로 정의한다고 기존 이름을 지울 수 있는건 당연히 아니다) typedef 기존자료형이름 새로운이름 이렇게 쓴다면 새로운 자료형 이름으로 변수를 선언할 수 있다. <source lang="cpp"> #include <stdio.h> typedef int Google; int main() { Google fantasy=3; return 0; } </source> int를 Google이라는 이름으로 새로 정의하고 변수를 하나 선언하고 3을 대입했다 이때 Google은 int형의 새로운 이름이니 정수대입이 가능한것이다. define 전처리기 처럼 단순히 치환하는 방식인지는 따져본건 아니니 자세한건 못알려준다. 다만 typedef는 전처리문이 아니므로 치환은 아닐거라고 본다. 그리고 전처리문이 아니며, 함수 블록 내에서도 쓸 수 있으며 순서에 영향을 받는다. <source lang="cpp"> #include <stdio.h> int main() { Google fantasy=3; // 오류! typedef int Google; Google fantasy1 = 2; // 오류 아님 return 0; } </source> 이렇게 문장의 위치에 따라 문제가 생길수도 있다. 근데 보통은 그냥 전처리문 밑에 적는다. 돌아가서 구조체에 대한 설명을 계속하자면 구조체안에 선언한 변수들은 . 으로 접근할 수 있다. 소스로 보자면 <source lang="cpp"> #include <stdio.h> typedef struct _MAN { int hungry; float temperature; } Man; int main() { Man who; who.temperature = 36.5; return 0; } </source> 위의 예제에서는 _MAN이라는 구조체를 만들고 hungry 변수와 temperature 변수를 기술하고 typedef로 Man이라는 이름으로 바꿨다. main함수에서 Man 구조체 자료형의 변수인 who를 선언하고 who 에 . 을 붙여 temperature 라는 아까 기술한 변수이름을 적어 해당 변수에 접근하고 있다. 마찬가지로 who.hungry = 100; 이라고 쓸 수 도 있다. 참고로 구조체는 C++에 가서도 사용이 가능하나 클래스를 쓰기에 그리 많이 사용되진 않는다.
요약:
조무위키에서의 모든 기여는 CC BY-SA 4.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
조무위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)