38강. typedef
1) typedef
int main() {
int n = 26;
printf("%d\n", n);
}
int main() {
typedef int int32;
int32 n = 26;
printf("%d\n", n);
}
int main() {
int point[2] = { 3,4 };
printf("(%d, %d)\n", point[0], point[1]);
}
int main() {
typedef int Pair[2];
Pair point = { 3,4 };
printf("(%d, %d)\n", point[0], point[1]);
}
typedef 를 사용하면
int point[2] = { 3 , 4 }; 이거랑 Pair point = { 3 , 4 }; 같은말이 된다.
int main() {
const char* name = "Doodle";
printf("이름 : %s\n", name);
}
int main() {
typedef const char* String;
String name = "Doodle";//char *name = "Doodle"
printf("이름 : %s\n", name);
}
39강. 구조체 만들기 struct
int main() {
typedef int Pair[2];
Pair p; //int p[2]; 랑 같은말
p[0] = 3;
p[1] = 4;
}
int main() {
typedef struct { int x, y; } Pair;
Pair p; //int p[2]; 랑 같은말
p.x = 3;
p.y = 4;
}
int main() {
typedef struct { int x, y; } Point;
Point p;
p.x = 3;
p.y = 4;
printf("(%d, %d)\n", p.x, p.y);
}
typedef를 없애려면 Point 를 앞으로 끌어내야됨
int main() {
struct Point { int x, y; } ;
Point p;
p.x = 3;
p.y = 4;
printf("(%d, %d)\n", p.x, p.y);
}
구조체는 전역변수로 빼주는 편이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
struct Point { int x, y; };
int main() {
Point p;
p.x = 3;
p.y = 4;
printf("(%d, %d)\n", p.x, p.y);
}
40강. 구조체와 메모리
struct Point {
int x, y;
char c;
double d;
};
구조체 안에서 계속 선언 할 수 있음
struct ProductInfo {
int num;
char name[100];
int cost;
};
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 19900 };
printf("상품 번호: %d\n", myProduct.num);
printf("상품 이름 : %s\n", myProduct.name);
printf("상품 가격 : %d원\n", myProduct.cost);
}
num 은 4바이트 , name은 100바이트, cost는 4바이트 해서
myProduct는 총 108바이트
sizeof(myProduct) 하면 108 이 나온다.
세가지 변수들의 주소값을 구해보자
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 19900 };
printf("상품 번호: %d\n", &myProduct.num);
printf("상품 이름 : %d\n", myProduct.name);
printf("상품 가격 : %d\n", &myProduct.cost);
}
num, name, cost 가 나란히 붙어있음을 알 수 있다.
064 068 168 그리고 이 전체를 myProduct라고 부른다.
그래서 myProduct 의 주솟값은 num 주솟값이랑 같음.
printf("상품 번호: %d\n", &myProduct.num);
printf("상품 이름 : %d\n", myProduct.name);
printf("상품 가격 : %d\n", &myProduct.cost);
printf("myProduct 주소: %d\n", &myProduct);
41강. 구조체 가리키기
구조체를 가리키는 포인터
*ptr_product.num 이렇게 하면 컴퓨터는 *(ptr_product.num) 이렇게 인식한다.
그래서 괄호를 (*ptr_product).num 이렇게 쳐야한다.
struct ProductInfo {
int num;
char name[100];
int cost;
};
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 19900 };
ProductInfo* ptr_product = &myProduct;
printf("상품 번호: %d\n", (*ptr_product).num);
printf("상품 이름 : %s\n", (*ptr_product).name);
printf("상품 가격 : %d원\n", (*ptr_product).cost);
}
(*ptr_product).num)를 간단하게 ptr_product->num 이렇게 화살표로 써도 된다.
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 19900 };
ProductInfo* ptr_product = &myProduct;
printf("상품 번호: %d\n", ptr_product->num);
printf("상품 이름 : %s\n", ptr_product->name);
printf("상품 가격 : %d원\n", ptr_product->cost);
}
10퍼센트 할인을 해보자
struct ProductInfo {
int num;
char name[100];
int cost;
};
void productSale(ProductInfo p, int percent) {
p.cost -= p.cost * percent / 100;
}
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 20000 };
productSale(myProduct, 10);
printf("상품 번호: %d\n", myProduct.num);
printf("상품 이름 : %s\n", myProduct.name);
printf("상품 가격 : %d원\n", myProduct.cost);
}
이렇게 하면 반영이 안된다.
왜냐하면 productSale 함수가 call by value 이기 때문이다.
p를 포인터로 바꿔야 된다.
struct ProductInfo {
int num;
char name[100];
int cost;
};
void productSale(ProductInfo *p, int percent) {
p->cost -= p->cost * percent / 100;
}
int main() {
ProductInfo myProduct = { 4797283, "제주한라봉", 20000 };
productSale(&myProduct, 10);
printf("상품 번호: %d\n", myProduct.num);
printf("상품 이름 : %s\n", myProduct.name);
printf("상품 가격 : %d원\n", myProduct.cost);
}
결과
한라봉이랑 꿀참외 바꿔치기
struct ProductInfo {
int num;
char name[100];
int cost;
};
void productSwap(ProductInfo* a, ProductInfo* b) {
ProductInfo tmp = *a;
*a = *b;
*b = tmp;
}
int main() {
ProductInfo myProduct{ 4797283, "제주한라봉", 20000 };
ProductInfo otherProduct{ 4797284, "성주 꿀참외", 10000 };
// 두개를 바꿔치기
productSwap(&myProduct, &otherProduct);
printf("상품 번호: %d\n", myProduct.num);
printf("상품 이름 : %s\n", myProduct.name);
printf("상품 가격 : %d원\n", myProduct.cost);
}
반응형
'개발자' 카테고리의 다른 글
두들낙서 C/C++ 44강~45강 상수 만들기 const, 매크로, enum, 매크로 자세히 알아보기 (0) | 2022.08.12 |
---|---|
두들낙서 C/C++ 42~43강 구조체 안에 함수를 집어넣기, 구조체 종합문제 (0) | 2022.08.12 |
두들낙서 C/C++ 36강, 37강 배열을 매개변수로 넘기기, 종합문제 (0) | 2022.08.11 |
두들낙서 C/C++ 31강~35강 함수, 함수의 반환, call by reference, 프로토 타입, 재귀 함수 (0) | 2022.06.20 |
두들낙서 C/C++ 24강~30강 포인터, 배열 포인터 , 포인터 배열 종합문제 (0) | 2022.06.17 |
댓글