Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 언어에서 구조에 대한 포인터에 액세스하는 방법은 무엇입니까?

<시간/>

구조에 대한 포인터는 전체 구조의 주소를 보유합니다.

주로 연결 리스트, 트리, 그래프 등과 같은 복잡한 데이터 구조를 만드는 데 사용됩니다.

구조체의 멤버는 화살표 연산자( -> )라는 특수 연산자를 사용하여 액세스할 수 있습니다.

선언

다음은 구조체에 대한 포인터 선언입니다 -

struct tagname *ptr;

예를 들어, struct 학생 *s;

액세스

다음을 사용하여 구조체에 대한 포인터에 액세스할 수 있습니다. -

Ptr-> membername;

예:s->sno, s->sname, s->marks;

예시

다음은 구조체에 대한 포인터에 액세스하는 C 프로그램입니다 -

#include<stdio.h>
struct classroom{
   int students[7];
};
int main(){
   struct classroom clr = {2, 3, 5, 7, 11, 13};
   int *ptr;
   ptr = (int *)&clr;
   printf("%d",*(ptr + 4));
   return 0;
}

출력

위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다 -

11

설명

여기에서 포인터 변수 ptr 객체 clr의 첫 번째 값 2의 주소를 보유합니다. 그러면 포인터 변수의 주소가 4씩 증가하고 마지막으로 값이 표시됩니다.

예를 들어,

*(ptr + 0) = 2
*(ptr + 1) = 3
*(ptr + 2) = 5
*(ptr + 3) = 7
*(ptr + 4) = 11
*(ptr + 5) = 13

구조체에 대한 포인터에 대해 알아야 할 또 다른 간단한 예를 고려하십시오 -

예시

struct student{
   int sno;
   char sname[30];
   float marks;
};
main ( ){
   struct student s;
   struct student *st;
   printf("enter sno, sname, marks :");
   scanf ("%d%s%f", & s.sno, s.sname, &s. marks);
   st = &s;
   printf ("details of the student are\n");
   printf ("Number = %d\n", st ->sno);
   printf ("name = %s\n", st->sname);
   printf ("marks =%f", st->marks);
   getch ( );
}

출력

위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다 -

enter sno, sname, marks :1 bhanu 69
details of the student are
Number = 1
name = bhanu
marks =69.000000