C 언어에서 구조체 지침의 정의와 인용 상해를 깊이 분석하다

3572 단어
지향 구조체 유형 변수의 사용은 먼저 구조체를 정의합니다. structstu{charname[20];longnumber;floatscore[4];};구조체 유형 변수를 가리키는 바늘 변수를 다시 정의합니다:struct stu*p1,*p2;포인터 변수 p1, p2를 정의하고 각각 구조체 유형 변수를 가리킨다.인용 형식은: 바늘 변수 → 구성원;[예7-2] 지향 구조체 유형 변수의 정확한 사용.구조체 유형 변수의 멤버를 입력하고 출력합니다.
 
  
#include /* m a l l o c ( ) * /
struct data / * * /
{
int day,month,year;
} ;
struct stu /* * /
{
char name[20];
long num;
struct data birthday; / * */
} ;
main() /* m a i n ( ) * /
{
struct stu *student; /* */
student=malloc(sizeof(struct stu)); / * */
printf("Input name,number,year,month,day:/n");
scanf("%s",student->name); /* 、 、 */
scanf("%ld",&student->num);
scanf("%d%d%d",&student->birthday.year,&student->birthday.month,
&student->birthday.day);
printf("/nOutputname,number,year,month,day/n");
/* */
printf("%20s%10ld%10d//%d//%d/n",student->name,student->num,
student->birthday.year,student->birthday.month,
student->birthday.day);
}

프로그램에서 구조체 형식 포인터를 사용하여 구조체 변수의 구성원을 인용하려면 C에서 제공하는 함수malloc()를 통해
바늘이 안전한 주소를 분배합니다.함수sizeof() 반환값은 주어진 데이터 형식이 차지하는 메모리의 바이트 수를 계산합니다.바늘이 가리키는 바
각 구성원의 형식은 다음과 같습니다.
 
  
student->name
student->num
student->birthday.year
student->birthday.month
student->birthday.day

구조체 유형 수조를 가리키는 바늘의 사용은 하나의 구조체 유형 수조를 정의하는데 그 수조의 이름은 수조의 첫 번째 주소라는 점을 앞의 과정이 명확하게 소개했다.
구조체 유형을 정의하는 지침은 수조의 원소를 가리키거나 수조를 가리키며 사용할 때 구분해야 한다.
[예7-3] 예7-2에서 구조체 유형을 정의했고 이 유형에 따라 구조체 수조와 구조체 유형을 가리키는 지침을 다시 정의했다.
 
  
struct data
{
intday,month,year;
};
struct stu/* */
{
char name[20];
long num;
struct data birthday;/ * */
};

struct stustudent[4],*p;정/*의 구조체 수조 및 지향 구조체 유형의 지침*/
p=student를 만듭니다. 이때 바늘p는 구조체 그룹 student를 가리킵니다.
p는 1차원 구조체 수조를 가리키는 지침으로 수조 원소에 대한 인용은 세 가지 방법을 사용할 수 있다.
1) 주소법student+i와 p+i는 모두 수조 i번째 요소의 주소를 표시하고 수조 요소의 각 구성원의 인용 형식은 다음과 같다.
(student+i)->name, (student+i)->num과 (p+i)->name, (p+i)->num 등.student+i 및 p+i
&student[i]와 같은 의미입니다.
2) 포인터법이 p가 수조의 어떤 원소를 가리키면 p++는 그 후속 원소를 가리킨다.
3) 바늘의 수조 표현법은 p=student이다. 우리는 바늘p가 수조student를 가리키고 p[i]는 수조의 i번째 요소를 가리키는데 그 효과와
student[i]와 같습니다.그룹 구성원에 대한 인용 설명은 다음과 같습니다: p[i].name、p[i].num 등.
[예7-4] 구조체 수조를 가리키는 바늘 변수의 사용.
 
  
structdata/* */
{
intday,month,year;
};
structstu/* */
{
char name[20];
long num;
struct data birthday;
};
main()
{inti;
structstu*p,student[4]={{"liying",1,1978,5,23},{"wangping",2,1979,3,14},
{"libo",3,1980,5,6},{"xuyan",4,1980,4,21}};
/* */
p=student;/* p,p student*/
printf("/n1----Outputname,number,year,month,day/n");
for(i=0;i<4;i++)/* */
printf("%20s%10ld%10d//%d//%d/n",(p+i)->name,(p+i)->num,
(p+i)->birthday.year,(p+i)->birthday.month,
(p+i)->birthday.day);
}

좋은 웹페이지 즐겨찾기