C언어/C언어 2차시

2차시 포인터와 구조체

sjong 2023. 4. 12. 01:45

포인터란?

C언어에서 포인터란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부릅니다.

char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장합니다

 

포인터 변수를 선언할 때 코드는 아래와 같습니다.

a라는 정수형 변수에 10을 넣어주고 포인터에 타입인 int와 변수 이름 앞에 *를 붙입니다. 그리고 &를 통하여 a라는 변수의 주소값을 불러옵니다. 마지막으로 printf를 할 때 포인터 변수 앞에 *을 붙여주면 주소에 지정된 값을 불러줍니다.  그러나 만약 *를 붙이지 않는다면 그저 주소값만 불러오게 됩니다.  

실행 결과는 아래와 같습니다.

포인터 변수 앞에 *를 붙였을때
포인터 변수 앞에 *를 붙이지 않았을때

이처럼 포인터는 *를 붙이는 것에 따라 출력값이 확연히 다를 수 있기에 코드를 짤 때는 상황에 맞게 적절히 사용해야 합니다.


구조체란?

구조체란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다.

구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다.

구조체의 선언은 다음과 같습니다. 

 

struct 구조체이름

{

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...
};

 

이를 코드로 짜면 다음과 같습니다.

구조체 이름을 student로 정의하고 그 안에 문자형 변수 name과 정수형 변수 age를 선언합니다.

이렇게 되면 name과 age를 포함하는 구조체 student가 만들어지게 됩니다.

이것을 응용한 코드는 다음과 같습니다.

main 함수에서 student라는 구조체를 stl 이란 변수로 정합니다. 그리고 {}안에 각 변수에 해당하는 값을 넣습니다.

이렇게 되면 stl의 name에는 "홍길동"이라는 값이, age에는 18이라는 값이 들어가게 됩니다.

실행 결과는 다음과 같습니다.

그러나 매번 구조체 변수를 쓸 때마다 struct를 붙이기엔 귀찮을 수 있습니다. 그럴 때는 typedef 키워드를 활용하여 구조체에 새로운 이름을 선언하면 매번 struct를 사용하지 않아도 됩니다. typedef 활용은 다음과 같습니다.

 

typedef struct (구조체이름)

{

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

} 구조체의새로운이름;

 

그리고 이것을 코드로 짜면 다음과 같습니다.

-구조체 이름은 생략 가능-

typdedef 키워드와 함께 구조체를 선언하고 마지막으로 구조체에 student라는 새로운 이름을 선언해줍니다.  

이것을 응용한 코드는 다음과 같습니다.

전 코드와는 다르게 stl이라는 구조체 변수를 보다 쉽게 선언할 수 있습니다. typedef 키워드로 만약 여러개의 구조체 변수를 선언할 경우 좀 더 효율적으로 코드를 짤 수 있습니다. 

실행 결과는 다음과 같습니다. 

-이전 결과와 같은 것을 알 수 있습니다-

이런 구조체들은 여러개의 값을 입력받을 때 보다 편리하게 코드를 짤 수 있도록 해줍니다. 

'C언어 > C언어 2차시' 카테고리의 다른 글

2차시 문제 3번 풀이  (0) 2023.04.11
2차시 문제 2번 풀이  (0) 2023.04.11
2차시 문제 1번 풀이  (0) 2023.04.09