[C] 포인터와 구조체

2022. 12. 18. 20:06프로그래밍

728x90

포인터는 컴퓨터 메모리에 저장된 값의 주소를 가리키는 데 사용됩니다. 위치에 저장된 값을 가져오는 것은 포인터 역참조로 부르고 있습니다. 포인터는 다음과 같은 반복적 프로세스들의 성능을 향상시킵니다:

  • 문자열 횡단(Traversing String)
  • 룩업 테이블
  • 제어 테이블
  • 트리 구조

 

포인터 상세 내용

  • 포인터 산술 연산: 포인터에 사용할 수 있는 산술 연산자는 ++, --, +, - 4개입니다.
  • 포인터 배열: 여러 포인터를 보유하도록 포인터의 배열을 정의할 수 있습니다.
  • 포인터의 포인터: C는 포인터의 포인터 등을 허용합니다.
  • C의 함수 포인터 전달: 참조 또는 주소로 인수를 전달하면 전달된 인수가 호출 함수에서 호출 된 함수에 의해 변경될 수 있습니다.
  • C의 함수에서 포인터 반환: C에서는 함수가 로컬 변수, 정적 변수 및 동적으로 할당된 메모리에 대한 포인터 또한 반환할 수 있습니다.

프로그램

 

포인터

#include <stdio.h>  
  
int main( )  
{  
	int a = 5;  
	int *b;  
	b = &a;  
	  
	printf ("value of a = %d\n", a);  
	printf ("value of a = %d\n", *(&a));  
	printf ("value of a = %d\n", *b);  
	printf ("address of a = %u\n", &a);  
	printf ("address of a = %d\n", b);  
	printf ("address of b = %u\n", &b);  
	printf ("value of b = address of a = %u", b);  
	return 0;  
}  
 

결과:

value of a = 5                                                                                                                   
value of a = 5                                                                                                                   
address of a = 3010494292                                                                                                        
address of a = -1284473004                                                                                                       
address of b = 3010494296                                                                                                        
value of b = address of a = 3010494292  
 

 

포인터의 포인터

#include <stdio.h>  
  
int main( )  
{  
	int a = 5;  
	int *b;  
	int **c;  
	b = &a;  
	c = &b;  
	printf ("value of a = %d\n", a);  
	printf ("value of a = %d\n", *(&a));  
	printf ("value of a = %d\n", *b);  
	printf ("value of a = %d\n", **c);  
	printf ("value of b = address of a = %u\n", b);  
	printf ("value of c = address of b = %u\n", c);  
	printf ("address of a = %u\n", &a);  
	printf ("address of a = %u\n", b);  
	printf ("address of a = %u\n", *c);  
	printf ("address of b = %u\n", &b);  
	printf ("address of b = %u\n", c);  
	printf ("address of c = %u\n", &c);  
	return 0;  
}  
 

 

결과:

value of a = 5                                                                                                                   
value of a = 5                                                                                                                   
value of a = 5                                                                                                                   
value of a = 5                                                                                                                   
value of b = address of a = 2831685116                                                                                           
value of c = address of b = 2831685120  
address of a = 2831685116                                                                                                        
address of a = 2831685116                                                                                                        
address of a = 2831685116                                                                                                        
address of b = 2831685120                                                                                                        
address of b = 2831685120                                                                                                        
address of c = 2831685128     
 

 

구조체는 메모리 블록에서 하나의 이름으로 배치될 변수의 그룹화된 목록을 정의하는 복합 데이터 유형입니다. 구조체에 대해서는 하나의 포인터를 사용하여 그안의 각가의 변수들에 접근할 수 있습니다.

 

문법:

struct structure_name   
{  
    data_type member1;  
    data_type member2;  
    .  
    .  
    data_type memeber;  
};  
 

잇점

  • 다양한 데이터 유형의 변수를 가질 수 있습니다.
  • 다양한 유형의 속성을 포함하는 객체를 만들 수 있습니다.
  • 프로그램 간에 데이터 레이아웃을 재사용할 수 있습니다.
  • linked lists, 스택, 큐, 트리, 그래프 등과 같은 다른 데이터 구조를 구현하는 데 사용됩니다.

 

프로그램

#include<stdio.h>  
#include<conio.h>  

void main( )  
{  
	struct employee  
	{  
		int id ;  
		float salary ;  
		int mobile ;  
	} ;  
	struct employee e1,e2,e3 ;  
	clrscr();  
	printf ("\nEnter ids, salary & mobile no. of 3 employee\n"  
	scanf ("%d %f %d", &e1.id, &e1.salary, &e1.mobile);  
	scanf ("%d%f %d", &e2.id, &e2.salary, &e2.mobile);  
	scanf ("%d %f %d", &e3.id, &e3.salary, &e3.mobile);  
	printf ("\n Entered Result ");  
	printf ("\n%d %f %d", e1.id, e1.salary, e1.mobile);  
	printf ("\n%d%f %d", e2.id, e2.salary, e2.mobile);  
	printf ("\n%d %f %d", e3.id, e3.salary, e3.mobile);  
	getch();  
}  
 
 

이상.

 

728x90