이번에는 C에서 구조체를 포인터와 사용하는 방법을 소개한다.
길게 써놓았으니 필요한 내용은 대부분 들어있다고 생각한다!
<구조체로 데이터를 묶기>
자료형은 정수, 문자 여기서 추가적으로
배열(문자열), 포인터(주소), 구조체(연관된 데이터 모으기, 숫자든 문자든 상관없이) 가 있다.
구조체 멤버접근 에는 멤버 연산자 (.) 를 사용한다
구조체 상에서 선언된 마우스의 x축 y축 등은 멤버라 한다.
구조체와 객체지향(oop)에서의 클래스의 차이점 이라면
구조체는 변수까지만 저장이 가능하다. 즉 함수는 저장이 불가능 한데
클래스 에서는 함수까지 저장이 가능하다는 것이 핵심이다.
구조체의 멤버가 배열일때
s.name="이름";
이런 방식으로 하면 오류가 난다.
배열은 주소값을 가지기 때문이다.
strcpy(s.name,"이름");
이런 방식으로 해준다
구조체는 중괄호를 통해 바로 초기화 가능하다
struct student s1 = {23, "park", 4.5};
이때 배열에서 초기화하듯이 바로 가능하다.
구조체를 선언하고 변수를 몇개 만들어서
p1,p2 라는 변수가 있을때
p2=p1; 은 가능하지만
if(p1==p2) 는 불가능 하다.
그릇만 보아서는 비교가 불가능 하다는 의미이다
그 내용, 즉 멤버가 같은지를 확인해야 된다.
if((p1.x==p2.x)&&(p1.y==p2.y))
이러한 조건일 때 비교가 가능하다는 의미이다.
구조체를 만들 때 다음같이 만들 수 도 있다.
typedef struct _point
{
int x;
int y;
} point;
로 선언하고
사용할 때는
point p1; 이런 식으로 선언하여 사용 가능하다.
이 방법으로 주로 많이 사용한다.
구조체 배열
구조체를 만든뒤에
메인에서 사용할때 변수를 배열로 선언한다.
구조체를 가리키는 포인터는 변수를 포인터로 만들고
&로 할당해주면 되는것이다.
-> 연산자는
포인터를 이용하여 구조체 변수를 선언할 때
멤버에 접근하려면 이때는 . 연산자가 아닌 -> 연산자를 사용하여
멤버에 접근을 한다.
<점(.) 연산자와 포인터(->) 연산자의 차이>
전자는 구조체에서 많이 보이는데
멤버 연산자 라고도 한다.
구조체 변수의 멤버에 접근할 때 사용한다.
구조체 뿐만 아니라 함수나 클래스에서도 사용한다.
후자는 포인터를 이용하여 구조체 변수를 선언할때
멤버에 접근하려면 이때는 . 연산자가 아닌 -> 연산자를 사용하여
멤버에 접근을 한다.
구조체를 일반적으로 선언시 .로 멤버에 접근
p1.x 같이
구조체를 포인터를 사용하여 선언시 ->로 멤버에 접근
p1->x 같이 사용함
아니면 (*p1).x 같이 사용가능 하다.
구조체의 일반변수를 함수의 인자(argument)로 사용할 경우
구조체의 복사본이 함수로 전달되어
그 만큼의 시간과 메모리가 소요되지만
구조체의 포인터를 함수의 인자로 전달할 경우에
메모리 공간과 시간을 절약 가능성이 있지만
원본 구조체가 훼손될 가능성이 있다.
'관 > 솔직한 c 언어 공부' 카테고리의 다른 글
알아두면 좋은 실용적 으로 사용되는 C언어 코드 (2020ver). (2) | 2020.08.08 |
---|---|
C언어 문자열 처리를 위한 함수들 정리(2020ver). (3) | 2020.08.04 |
C언어 포인터변수란? (2020ver). (4) | 2020.07.31 |
C언어 라이브러리와 변수를 알아보자 (2020ver). (0) | 2020.07.30 |
C언어 배열이 뭘까? (2020ver). (0) | 2020.07.29 |
댓글