목록언어/C언어 (10)
Dailelog

구조체 (structure) 서로 밀접한 연관이 있는 변수들을 모아 놓은 복합 변수 -> 나중에 "객체"라고 지칭함 cf.배열 */ #include struct point { int x; int y; }; void findCenterPoint(struct point *p,struct point q,struct point r) { p->x = (q.x + r.x) / 2; p->y = (q.y + r.y) / 2; } void printPoint(char *name,struct point p) { printf("%s = (%d,%d)\n",name,p.x,p.y); } main() { struct point a; struct point b; struct point c; a.x = 10; a.y = 10; ..

#include #include //#define _CRT_SECURE_NO_WARNINGS int getSum(int **x,int row,int col) { int s = 0; int i,j; for(i = 0; i

#include #include main() { int *p; //int p[3]; //원래는 이렇게 자동할당으로 배열을 만들어 주어야 하는데 만들어주지 // 않고 동적할당으로 heap영역에 만들게 됨 int i; p = (int *) malloc(3*sizeof(int));//12byte를 할당해서 저장 장소 3개를 만드는 행위 //동적할당은 사용하는 이유는 배열에서 공간을 예상해서 선언해주는데 그 공간이 정해지지 않을때 //그리고 오버플로우를 방지하기 위해서 //int p[n]; 배열의 크기는 변수로 못함 그래서 sizeof앞에 수를 변수로 처리하면 오버플로우 없이 //저장공간을 그때그때 할당할수 있다. p[0] = 13; p[1] = 72; p[2] = 81; for(i = 0; i

#include #include int my_strcmp(char *s,char *t) { int i = 0; while(s[i] == t[i]) { if(s[i++] == '\0')// 이 if문의 목적은 두 문자열이 같을 때 0을 반환한다. { return (0); } i++; } return(s[i] - t[i]); } main() { char *p = "kwon"; char *q = "Kim"; int cmp; cmp =my_strcmp(p,q); //cmp = strcmp(p,q); //함수가 여러번 수행되는 것을 막기 위해 strcmp의 값을 저장해서 사용한다고 함 if (cmp == 0/*"Kwon" > "Kim"*/) //문자열을 비교할때 부등호만 사용했을때 단순히 주솟값만 비교하게 된다...

#include #include void my_strcpy(char *to,char *from) { while(*to++ = *from++); } main() { //char *x = "kim"; char *x = "Kim taegyun"; char y[4]; // 이렇게 되면 기억 장소가 확보 되어 있어야 다른 변수의 기억장소에 영향을 주는 것을 막을 수 있다. //충분히 넉넉하게 용량을 확보 해야 한다. //char *y = "Lee";// x,y 둘다 기억장소를 가르키고 있을때 //x의 "Kim"을 y의 "Lee"는 static area에 옮길때 상수풀에 있어 수정을 할수 없기 때문에 런타임 에러가 뜬다. //char *y; //

#include #define NULL (0) main() { int a,b; int *ap; int *bp; printf("sizeof(int*) = %d\n",sizeof(int*)); printf("%d %d %d %d\n",&a,&b,&ap,&bp); ap = &a; //&는 a의 주소를 나타냄,주솟값은 정수가 아니다. bp = &b; //ap =0; 은 아무것도 안가르킨다는 뜻 -> ap = NULL; 그냥 숫자 0을 쓰면 가독성 떨어져서 NULL쓴다 a = 10; b = 20; *ap = 100; *bp =*bp+200; printf("a = %d, b = %d\n",a,b); bp = bp +3; //int 단위로 4byte를 3번 더해 bp는 a의 주솟값을 가리키게 된다. 포인터의 연산 덧..

오늘은 문자열 함수 중 srtlen()를 공부하고 직접 strlen를 구현해 보았다. #include #include int my_strlen(char *s) { int n; for(n = 0; *s != '\0'; s++) { n++; } return n; } main() { char x[10];//= {'k','i','m','\0'}; int n; int i; /* x[0] = 'k'; //''를 사용하는 이유는 문자 상수 이기 떄문에 실제로는 아스키 코드 값이라고 생각하면 됨 x[1] = 'i'; x[2] = 'm'; x[3] = '\0';// \0은 나머지 문자열 자리에 NULL 캐릭터 값을 넣는 역활을 한다. */ //사용하지 않는다면 쓰레기 값이 들어가게 된다. for(i = 0; i

오늘 강의 핵심은 2차원 배열을 사용하고 범용성을 가진 함수 만들어 보고 사용하는 방법을 배우는 것이 목적이었다. 보통 2차원 배열 즉 2Dimensional Array는 표처럼 사용되는 경우가 많다. 근데 이 2차원 배열을 함수 속에서 사용할 때 문제 되는 점이 존재한다. 그것은 함수는 범용성을 가지고 있어야 한다. 그 과정에서 2차원 배열을 함수 속에서 1차원 배열처럼 사용하는 것이다. 우리가 생각하는 2차원 배열은 직사각형의 표라고 생각하는 경우가 보통이다. 하지만 컴퓨터의 메모리는 그렇지 않다. 메모리는 변수를 저장하는 주솟값을 1열로 저장하기 때문에 우리도 함수에서 1열로 주솟값을 받아와 이용할 생각이다. 아래의 코드를 확인해보자. #include //void print2DArray(int p[..

#include void printArray(int a[], int n) { int i; for (i = 0; i max) { max = p[i]; maxPos = i; } } return maxPos; } void swap(int* a, int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; } void selectionSort(int p[], int n) { int i;..

/* swap1.c */ /* 강의 주제 : swapping */ #include main() { int a = 10; int b = 20; int tmp; printf("before swapping: a = %d b = %d\n", a, b); tmp = a; a = b; b = tmp; /* //아래 방식으로 했을땐... a = b; b = a; */ printf("after swapping: a = %d b = %d\n", a, b); } 결과는 다음과 같이 나온다. before swapping: a = 10 b = 20 after swapping: a = 20 b = 10 #include void swap(int *a,int *b) { int tmp; tmp = *a; *a = *b; *b = t..