C 언어에서 구조체 지침의 정의와 인용 상해를 깊이 분석하다
#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);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.