구조체
여러 변수들을 모아서, 하나의 객체를 구성할 때 사용하는 사용자 정의 타입 객체
구조체의 정의 및 사용
struct person // 구조체 정의 명령어 + 구조체 이름
{
char *name; // 변수 이름
int age; // 변수 이름
};
struct person user1;
user1.name = "h user";
printf("%s", user1.name);
struct person
{
char *name;
int age;
} test;
test.name = "h user";
test.age = 40;
printf("%s: %d", test.name, test.age);
struct person
{
char *name;
int age;
}
struct person *p;
p -> name = "test_2"; // 포인터 변수로 선언했을 때에는 . 을 사용하지 않고, -> 을 사용한다
p -> age = 40;
printf("%s: %d", test->name, test->age);
#include<stdio.h>
int main() {
struct list {
int *fp;
} data, *p; // list 구조체 data, *p 선언
int x[] = {100, 200, 300, 400};
p = &data; // 이 부분에서 p가 가지고 있던 구조체는 의미가 없어지고 p와 data는 같은 구조체 공간을 가리키게 됨.
p->fp = x + 1; // p의 변수 fp는 x의 주소 +1 을 가지고 있음
printf("%d", *(++p->fp)); // 구조체이므로 p->fp를 먼저 고려해준다(하나의 변수로 취급). ++(x의 주소 +1)이 되므로 x의 주소 +2 가 가리키는 값
return 0;
}
// 300
배열 포인터
배열의 시작 주소값을 저장할 수 있는 포인터
2차원 배열의 구조
그냥 하나의 포인터일 뿐이다
int (*in)[2]; // in이라는 포인터 변수를 만들건데 2개씩 자르겠다
int num[3] = {1, 2, 3}; // 3개이지만 2개씩 잘라서 저장 -> 2차원 배열
in = num; // in에다가 num의 주소를 저장
// 아래 이미지 참고
printf("%d\n", in); // 100, num의 주소
printf("%d\n", num); // 100, num의 주소
printf("%d\n", *in); // 100, 0행의 대표 주소
printf("%d\n", **in); // 1, in의 값의 값
printf("%d\n", *(*in+1)); // 2
printf("%d\n", *(*in+2); // 3
printf("%d\n", *in[1]); // 3
int (*in)[4];
int num[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
in = num;
printf("%d", **in); // 1
printf("%d", *(*in+1)); // 2
printf("%d", **(in+1)); // 5
연습문제
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main () {
int (*in)[N], *out, sum = 0; // 3개씩 잘라서 재구성 하겠다
in = (int (*)[N]) malloc( N * N * sizeof(int)); // 9칸짜리 배열을 할당
out = (int *) in; // out은 in 과 똑같은 배열을 가리킴
for(int i = 0; i < N * N; i++)
out[i] = i;
for(int i = 0; i < N; i++)
sum += in[i][i]; // 0 + 4 + 8 = 12
printf("%d", sum); // 12
}
'정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 특강 49~52강 정리(static 변수) (0) | 2024.10.09 |
---|---|
[정보처리기사] C언어 특강 37~48강 정리(함수에 주소전달) (0) | 2024.10.06 |
[정보처리기사] C언어 특강 29~34강 정리(포인터) (0) | 2024.10.05 |
[정보처리기사] C언어 특강 23~28강 정리(포인터) (0) | 2024.10.04 |
[정보처리기사] C언어 특강 21~22강 정리(배열) (0) | 2024.10.04 |