C 언어 구조 체 (2)
1. 개술
C 언어 는 사용자 가 스스로 이러한 데이터 구 조 를 지정 할 수 있 도록 합 니 다. 이 는 서로 다른 유형의 데이터 로 하나의 전체 로 조합 하여 사용 할 수 있 도록 합 니 다. 이런 조합 이 하나의 전체 에 있 는 데 이 터 는 서로 관련 되 어 있 습 니 다. 이런 데이터 구 조 는 구조 체 라 고 하 는데 이것 은 고급 언어 에서 기록 하 는 것 과 같 습 니 다.
하나의 구조 체 유형 을 설명 하 는 일반적인 형식 은 다음 과 같다.
struct 구조 체 명
{구성원 목록}; //이 곳 은 " ;” (분점) 아니 "," (쉼표);
예:
struct student
{
char name[5];
char id[10];
int scores;
}; //이곳 의 분 호 를 빠 뜨 려 서 는 안 된다. 그렇지 않 으 면 잘못 보고 해 야 한다.
구조 체 명 은 구조 유형의 표지 로 사용 되 는데 구조 표지 라 고도 부른다. 대괄호 안에 이 구조 체 의 각 구성원 이 있 는데 그들 이 하나의 구조 체 를 구성 하여 각 구성원 에 대해 유형 성명 을 한다.
여기 있 는 student 는 구조 체 이름 입 니 다. 서로 다른 구조 체 이름 은 서로 다른 구조 체 유형 을 표시 합 니 다. 예 를 들 어 student stu {구성원 변수}, student stu 1 {구성원 변수} 와 다른 구조 체 유형 입 니 다.
2. 구조 체 유형 변 수 를 정의 하 는 방법
앞에서 하나의 구조 체 유형 만 정 의 했 을 뿐 하나의 모델 에 해당 하지만 그 중에서 구체 적 인 데이터 가 없다. 시스템 이 이에 대해 실제 메모리 유닛 을 분배 하지 않 고 프로그램 에서 구조 체 유형의 데 이 터 를 사용 할 수 있 도록 구조 체 유형의 변 수 를 정의 하고 그 중에서 구체 적 인 데 이 터 를 저장 해 야 한다. 다음 과 같은 3 가지 방법 으로 구조 체 유형 변 수 를 정의 할 수 있다.
(1) 구조 체 유형 을 먼저 정의 하고 변수 이름 을 정의 한다.
위 에서 구조 체 형식 struct student 를 정의 한 경우 변 수 를 정의 할 수 있 습 니 다. 예 를 들 어:
struct student stu1; //이곳 의 struct student 는 함께 사용 해 야 전체 구조 체 유형 을 표시 할 수 있 습 니 다. 그렇지 않 으 면 잘못 보고 할 수 있 습 니 다.
구조 체 변 수 를 정의 한 후 시스템 은 메모리 셀 을 할당 합 니 다. 예 를 들 어 stu 1 은 메모리 에서 20 개의 바이트 를 차지 합 니 다. 구조 체 변 수 는 메모리 에 메모 리 를 신청 하 는 방법 에 대해 서 는 본 블 로그 의 "C 언어 구조 체 (1)" 를 참조 하 십시오.
(2) 구조 체 유형 을 정의 할 때 구조 체 유형 변 수 를 함께 정의 한다.
struct 구조 체 명
{
구성원 표 열;
}변수 명 표 열;
(3) 구조 체 유형 변 수 를 직접 정의 한다.
struct //(2) 와 의 차 이 는 이곳 에서 구조 체 명 을 생략 한 것 이다.
{
구성원 표 열;
} 변수 이름 목록;
구조 체 유형 에 대해 몇 가지 설명 이 있 습 니 다.
a. 유형 과 변 수 는 서로 다른 개념 입 니 다. 혼동 이 아니 라 변수 에 대한 할당, 액세스 또는 연산 만 할 수 있 습 니 다. 한 유형 에 대한 할당, 액세스 또는 연산 은 할 수 없습니다. 컴 파일 할 때 유형 에 대해 공간 을 분배 하지 않 고 변수 에 만 공간 을 분배 합 니 다.
b. 구조 체 의 구성원 에 게 유닛 으로 사용 할 수 있 고 그의 역할 은 일반 변수 에 해당 합 니 다.
c. 구성원 도 하나의 구조 체 변수 일 수 있다.
예:
struct data
{
int month;
int day;
int year;
};
struct student
{
char name[5];
char id[10];
strcut data birthday;
int scores;
}stu1;
d. 구성원 이름 은 프로그램의 변수 이름과 구조 체 이름과 같 을 수 있 고 서로 영향 을 주지 않 습 니 다.
3. 구조 체 변수의 인용
(1) 하나의 구조 체 변 수 를 하나의 전체 로 입력 하고 출력 할 수 없다.
구조 체 변수 중의 각 구성원 만 각각 입 출력 할 수 있 습 니 다. 구조 체 변수 중의 구성원 을 응용 하 는 방식 은?
구조 체 변수 명. 구성원 명
예 를 들 어 stu1. name 은 stu 1 변수 중의 name 구성원 을 표시 합 니 다.
"." 구성원 (분량) 연산 자 는 모든 연산 자 중에서 우선 순위 가 가장 높 기 때문에 stu1. name 을 하나의 전체 로 볼 수 있 습 니 다.
(2) 구성원 자체 가 또 하나의 구조 체 유형 에 속한다 면 몇 개의 구성원 연산 자 를 사용 하여 1 급 1 급 으로 가장 낮은 구성원 을 찾 아야 한다. 가장 낮은 구성원 에 게 만 할당 이나 액세스, 연산 을 할 수 있다.
(3) 구조 체 변수의 구성원 에 대해 일반 변수 처럼 각종 연산 을 할 수 있다 (그 유형 에 따라 할 수 있 는 연산 을 결정 한다).
++stu1.socres;
"." 연산 자의 우선 순위 가 가장 높 기 때문에 stu1. age + 는 stu1. scores 에 대해 자체 연산 을 하 는 것 입 니 다. 먼저 scores 에 대해 자체 연산 을 하 는 것 이 아 닙 니 다.
(4) 구조 체 변수 구성원 의 주 소 를 참조 할 수 있 습 니 다. 구조 체 변수의 주 소 를 참조 할 수도 있 습 니 다.
구조 체 변수의 주 소 는 주로 함수 매개 변수 로 구조 체 주 소 를 전달 하 는 데 사용 된다.
4. 구조 체 변수의 초기 화
다른 유형의 변수 와 마찬가지 로 구조 체 변 수 를 정의 할 때 초기 값 을 지정 할 수 있 습 니 다.
예:
struct student
{
char name[5];
char[id];
int scores;
}stu1={"sun","20121214",90};
5. 구조 체 배열
하나의 구조 체 변수 에 한 그룹의 데 이 터 를 저장 할 수 있다 (예 를 들 어 한 학생 의 이름, 학 번, 성적 등 데이터)10 명의 학생 데이터 가 연산 에 참가 해 야 한다 면 분명히 배열 을 사용 해 야 한다. 이것 이 바로 구조 체 배열 이다. 구조 체 배열 과 수치 형 배열 의 차이 점 은 각 배열 요소 가 하나의 구조 체 유형의 데이터 로 각 구성원 을 포함한다 는 것 이다.
6. 구조 체 형식 데 이 터 를 가리 키 는 지침
구조 체 변수의 지침 은 이 변수 가 차지 하 는 메모리 세그먼트 의 시작 주소 입 니 다. 하나의 포인터 변 수 를 설정 하여 구조 체 변 수 를 가리 킬 수 있 습 니 다. 이때 이 포인터 변수의 값 은 구조 체 변수의 시작 위치 입 니 다. 포인터 변 수 는 구조 체 배열 의 요 소 를 가리 킬 수도 있 습 니 다.
6.1 구조 체 변 수 를 가리 키 는 지침
구조 체 변 수 를 가리 키 는 포인터 의 응용:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
struct student
{
char id[10];
char name[5];
int scores;
};
void main()
{
struct student stu1;
struct student *p;
p=&stu1;
strcpy(stu1.name,"Sun");
strcpy(stu1.id,"2012121404");
stu1.scores=90;
printf("ID:%s name:%s socres:%f",stu1.id,stu1.name,stu1.socres);
printf("ID:%s name:%s socres:%f" p->id,p->stu1.name,p->socres);
printf("ID:%s name:%s socres:%f"(*p).id,(*p).name,(*p).socres);
system("pause");
}
세 개의 printf 출력 결 과 를 볼 수 있 습 니 다.C 언어 에서 편리 하고 직관 적 으로 하기 위해 (* p). scores 를 p - > scores 로 대체 할 수 있 습 니 다. 이것 은 * p 가 가리 키 는 구조 체 변수 중의 scores 구성원 을 나타 내 고 똑 같이 (* p). scores 는 p - > scores 와 같 습 니 다.
즉, 세 가지 형식의 등가 이다.
구성 변수
b. (* p). 멤버 명
c. p - > 멤버 명
그 중 - > 지향 연산 자가 되다
6.2 구조 체 배열 을 가리 키 는 지침
배열 이나 배열 요 소 를 가리 키 는 포인터 와 포인터 변 수 를 사용 할 수 있 으 므 로 구조 체 배열 과 그 요 소 를 포인터 변수 로 가리 킬 수 있 습 니 다.
#include <stdio.h>
#include <stdlib.h>
struct student
{
char id[10];
char name[5];
int scores;
};
struct student stu[3]={{"1111","sun",18},{"2222","tian",19},{"3333","sheng",20}};
int main()
{
struct student *p;
printf("No---------------Name--------------scores
");
for(p=stu;p<stu+3;p++)
//-
printf("%s %-5s %d
",p->id,p->name,p->scores);
system("pause");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.