typeof 선언 : 기존에 존재하는 자료형의 이름에 새 이름을 부여하는 것을 목적으로 하는 선언 typeof 선언에 있어서 새로운 이름의 부여는 가장 마지막에 등장하는 단어, 구별 위해 앞에 대문자로 표시 typeof int INT, typeof unsigned int UINT, typeof struct point POINT #include struct point { int xpos; int ypos; }; typedef struct point Point; typedef struct person { char name[20]; char phoneNum[20]; int age; } Person; //person을 생략해도 돼. 단, struct person man;은 불가능(어차피 안해) int main(..
구조체 : 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구 struct person{ char name[20]; char phoneNum[20]; int age; }; 구조체 변수 : struct type_name val_name; struct person man; 구조체 변수에 접근 man.name="홍길동"; 구조체 변수에 문자열 저장을 하려면 strcpy 함수를 호출해야 한다. ex) strcpy(man1.name, "홍길동"); 구조체 변수에 초기화 과정에서는 문자열 저장을 위해서 strcpy 함수를 호출하지 않아도 된다. ex) struct person man={"홍길동", "010", 22}; 구조체 배열 struct point arr[4]; 구조체 변수와 포인터 #include st..
문자와 문자열 관련 함수 프로그램상에서 모니터와 키보드를 대상으로 데이터를 입출력 하기 위해서는 이들을 연결시켜주느 다리가 필요 다리의 역할을 하는 매개체 : 스트림(한 방향으로 흐르는 데이터의 흐름) 콘솔 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동으로 생성되고, 프로그램이 종료되면 자동으로 소멸되는 스트림이다. stdin 표준 입력 스트림 키보드 대상으로 입력 stdout 표준 출력 스트림 모니터 대상으로 출력 stderr 표준 에러 스트림 모니터 대상으로 출력 문자 출력 함수 : putchar, fputc int putchar(int c); int fputc(int c, FILE * stream); => 함수호출 성공 시 쓰여진 문자정보가, 실패 시 EOF 반환 문자 ..
알고리즘 문제를 요즘 안 풀어서 그런지 몰라도 달팽이 배열을 풀지 못했다. 구글링해서 코드를 한 번 보고 이해해서 다시 풀었다. #include int main(void) { int len; //입력받는 배열의 길이 int num; //배열의 요소(1,2,3~~) int arr[50][50]; //입력할 배열 int i, j; int x, y; //배열의 행,열 int t; //가로,세로가 각각 커졌다가 작아지는 걸 t에 부호를 붙여서 이용 int jmax; //열의 최대값 printf("달팽이 배열의 길이를 입력해라"); scanf_s("%d", &len); num = 1; jmax = len; x = 0, y = -1; t = 1; while (0 < jmax) { for (i = 0; i < jma..
다차원 배열 int arr[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int arr[3][3]={1,2,3,4,5,6,7,8,8}; 포인터의 포인터 이중 포인터 or 더블 포인터 : 포인터의 포인터, 변수를 가리키는 또 다른 포인터 변수 int main(void){ double num=3.14; double * ptr=# double ** dptr=&ptr; *dptr=... // *dptr은 포인터 변수 ptr을 의미 *(*dptr)=... // *(*dptr)은 변수 num을 의미 } ptr은 주소고(함수에 전달할땐 주소가 복사되서 ptr값 바꿀 수 없어. &ptr로 전달해야돼) *ptr은 변수 num 다중 포인터 변수 : *연산자 2개이상 int main(void) { int..
포인터는 c언어가 Low 레벨 언어의 특성을 지닌다고 이야기하게 만든 장본인이다. 왜냐하면 포인터를 이용하면 메모리에 직접 접근이 가능하기 때문이다. 포인터 변수란 메모리의 주소 값을 저장하기 위한 변수이다. 포인터 변수의 크기는 64비트에서는 8바이트(=64비트 시스템에서는 주소 값을 64비트로 표현하니까), 32비트에서는 4바이트 int num=7; int * pnum; // 포인터 변수 pnum의 선언 pnum = # // num의 주소 값을 포인터 변수 pnum에 저장(변수만 저장가능, 상수x) 변수의 주소 값을 반환하는 & 연산자 포인터가 가리키는 메모리를 참조하는 * 연산자 다양한 포인터 형이 존재하는 이유 : 포인터 형은 메모리 공간을 참조하는 기준이 된다.(형의 일치) 포인터 변수의..
이전에도 알고리즘 문제를 풀 때 최대공약수, 최소공배수를 구하는 문제가 많이 나왔다. c언어를 공부하던 중 또 나와서 글을 올리게 됬다. 우리는 수학과가 아니므로 증명을 할 필요는 없다(대수학에서 배웠다 나는 수학과라서..) 최대공약수 int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } ㅣ function gcd(n1, n2) { return n1%n2 ? gcd(n2, n1%n2) : n2; } 최소공배수 a * b / gcd(a,b)
