C언어(9)
-
구조체, 포인터, 동적할당 문제
주석처리되있는 문장을 코드로 표현하면 된다. 푸는 방식 : 먼저 전체적인 그림으로 상황을 파악한다. 1번 #include #include typedef struct { int data1; int data2; }Data1; void Func1(Data1** p) { (**p).data1 = 100; // (*p)->data1 = 100; return (*p)->data1; } void Func2(Data1* p) { p->data2 = 200; return p->data2; } int main() { Data1* p = (Data1*)malloc(sizeof(Data1)); Func1(&p); //Func1()함수를 만들어서 Func1()안에서 data1에 100을 넣으세요. Func2(p); //Func..
2022.08.12 -
배열과 포인터의 관계
배열명 : 첫 번째 배열 요소의 주소 주소 연산 (덧셈) 주소 + 정수 -> 주소 + (정수 * 주소를 구한 변수의 크기) int main(void) { int ary[3]; int i; *(ary + 0) = 10; *(ary + 1) = 20; *(ary + 2) = 30; for (i = 0; i < 3; i++) { printf("%d\n", ary[i]); } return 0; } 배열명이 첫 번째 배열 요소의 주소라는 것과 주소연산 그리고 간접참조연산자를 이용하여 배열요소에 값을 대입하였다. int main(void) { int ary[3]; int i; int* pa = ary; *pa = 10; *(pa + 1) = 20; *(pa + 2) = 30; for (i = 0; i < 3; i+..
2022.05.23 -
내가 헷갈리는 포인터 파트 정리!
포인터 : 변수의 메모리 주소를 저장하는 변수 * : 간접 참조 연산자 & : 주소연산자 이 변수가 포인터라는 것을 명시해 주기위해 선언할 때 *를 붙인다. 필자는 간접 참조 연산자(*)와 선언 시 사용하는 *가 헷갈렸다. 생각한 결과 : 선언 시 사용하는 * 와 간접 참조 연산자는 관계가 없다. # include int main(void) { int a = 4;; int b = 3; int* pa = a; int* pb = &b; printf("%d\n", pa); // printf("%d\n", *pa); -> 포인터 pa는 4라는 주소를 가리키고 *pa는 주소가 4인 메모리의 값을 나타낸다. printf("%d\n", pb); printf("%d\n", *pb); return 0; } 주소 : 변수..
2022.05.23 -
c언어 - 테트리스 만들기 초기 설정,4 블럭 낙하
void init() { CONSOLE_CURSOR_INFO cursorInfo; cursorInfo.bVisible = 0; cursorInfo.dwSize = 1; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); srand(time(NULL)); } 콘솔창에 항상 하얀색 커서가 깜빡거리기에 이를 없애주기 위해서 SetConsoleCursorInfo함수를 사용했습니다. srand(time(NULL))을 사용하여 RANDOM값을 추출하였습니다. void randomform(void) { int blockform; blockform = rand() % 7; } randomform함수를 이용해 7가지 블럭 중 랜덤으로 하나를 고릅니다...
2022.02.12 -
c언어-테트리스만들기3, 테트리스 블럭만들기, 다차원배열
1차원 배열 한 학생의 국어,수학,영어점수 int score[3] = { 88,92,88 }; 2차원 배열은 1차원 배열을 요소로 갖는 배열이다. 2명의 학생의 국어,수학,영어점수 int score[2][3] = { {88,98,78},{89,97,89} }; 마찬가지로 n차원 배열은 (n-1)배열을 요소로 갖는 배열이다. 테트리스블럭은 4차원배열을 활용해서 만들 수 있다. # include int main(void) { int block[7][4][4][4] = { { // 네모모양 블럭 { {0,0,0,0}, {0,1,1,0}, {0,1,1,0}, {0,0,0,0} }, { {0,0,0,0}, {0,1,1,0}, {0,1,1,0}, {0,0,0,0} }, { {0,0,0,0}, {0,1,1,0}, {..
2022.02.09 -
c언어 -테트리스 만들기2 위치 지정하기, 키보드로 움직이기
_kbhit( ): 입력했는 지 여부 확인 int kbhit(void)의 형태이다. 반환값은 입력 하였을 경우 : 1, 입력하지 않았을 경우 :0 (# include 를 통해 헤더파일 선언) _getch( ): 입력을 받는 함수 scanf_s( )와 다른 점은 입력한 키보드의 내용이 화면에 출력되지 않는 다는 점과, Enter키를 통해 입력을 확인하지 않고 키를 누른 순간 입력 버퍼에 값이 들어가는 것이다. int main(void) { printMapBoundary(); int key; int currentPosX=10; int currentPosY=1; gotoxy(10,1); printf("■"); while (1) { if (_kbhit()) { key = _getch(); switch (key)..
2022.01.28