본문 바로가기

공부/c언어

c language do you know how to make the computer application? anwer is c language, c++, java, etc. the basicest one thing of them is c language first, if you learn about c language you will learn quickly other computer langue 더보기
문자열 (c언어) printf(), scanf(), putch(), getch() char* gets(char *) 문자열을 입력하고 입력 받은 첫문자의 주소 값을 반환 enter키(개행문자=\n) 누를때까지 공백을 포함한 모든 문자열 입력받음 마지막에 enter키 넣지 않고 마지막에 문자열을 의미하는 NULL문자(\0)을 넣음 int puts(char *) 인자인 문자열에서 마지막 NULL문자를 제외한 모든 문자열과 마지막에 개행 문자인 \n을 출력 일반적으로 0반환, 오류가 발생하면 EOF(end of file=-1)을 반환 반환값이 int인 이유는 char로 하면 1바이트만 사용하기 때문에 -1(11111111)과 255(11111111)를 똑같이 인식하기 때문에 구분하기 위해서 4바이트인 int를 사용 int에서는.. 더보기
포인터(c언어) 포인터 int b=3; printf("%d", b);과 같은 구문 있다고 하면 b는 컴파일시 어떤 주소값을 나타내는지 컴퓨터가 처리해서 알고 있는 상태임 b에 해당되는 메모리의 주소를 찾아간다 그 메모리 주소 안에 저장되어 있는 내용을 확인하고 가져와서 printf함수에서 사용하게 되는 것 int b=3; int *a = &b; printf("%d", *a); 맨 아래의 *a의 의미 1. a는 컴파일시 어떤 주소값을 나타내는지 컴퓨터가 처리해서 알고 있는 상태 a에 해당되는 메모리 주소를 찾아감 2. 그 메모리 주소안에 저장되어 있는 내용을 확인하고 가져옴 3. 가져온 값은 주소값을 나타내고 있으므로 그 주소값을 찾아감 4. 그 메모리 주소안에 저장되어 있는 내용을 확인하고 가져옴 int tAry[][2.. 더보기
프로그래밍 공부 순서 1. c언어 완전 기본 문법 2. 운영체제론 3. 시스템 프로그래밍 4. linux kernel 5. kernel programming C 프로그래밍 관련 학습 로드맵 입니다. A.c언어 / c++ / Visual c++ MFC / Com프로그래밍/Atl 프로그래밍 B.C언어/win32 API 프로그래밍/윈도우 네트워크 프로그래밍/ 윈도우 시스템 프로그래밍/Com프로그래밍/ATL프로그래밍 WIn31API + C++ /입문자 과정입니다. Visual C++ MFC + 윈도우 네트워크 프로그래밍 / 중급자 과정입니다. Com프로그래밍 부터는 전문과 과정입니다. 대략 배워야 하는 순서를 말씀드렸습니다. 더보기
구조체와 열거형 연습( ========================================================================================================================================= card.h #include #include enum enumsuit {Hearts, Diamonds, Clubs, Spades}; enum enumface {Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King}; typedef enum eumsuit enumsuit; typedef enum enumface enumface; struct card { enumsuit suit.. 더보기
배열에 문자열 할당하기 초기할당시 배열에 문자열 할당가능 a[] = "adsfjklafd"; 재 할당시는 배열에 문자열 할당 불가능 a[] = "adsfjlkasd"; strcpy()함수를 이용하여 배열에 문자열을 할당해야 함 더보기
상수와 변수의 차이 상수 : 정해져 있는 값 (예: 1, 2, 3, ...) 변수 : 상수를 담을 수 있는 그릇 (예 : 변수a = 1, 변수a에 상수1을 넣는다) 다차원 배열에서의 포인터에서 이 개념이 꼭 필요하다... tary[0][0]이 있다고 할 때 tary와 tary[0]는 모두 상수로 tary[0][0]의 주소값을 가짐 *tary = tary tary는 변수가 아니고 상수이므로 포인터 변수가 될 수 없다 그러므로 tary는 tary[0]을 가르키기는 하지만 tary[0]의 주소값을 가지고 있지는 않다 더보기
char []와 char * 차이점 char str[] = "abc"; char *str = "abc"; printf("%s", str) 하면 똑같이 abc가 찍혀나오니깐 별 차이가 없다고 생각할 수도 있겠지만 이 두 선언은 엄연히 다르다. 위 코드를 gcc -S 옵션으로 어셈블리로 생성해보면 두 코드 모두 "abc"를 .rodata 섹션에 할당한다, gcc2_compiled.: .section .rodata .LC0: .byte 0x61,0x62,0x63,0x0 여기서 .rodata는 읽기 전용(read only) 데이터를 말한다. 그렇다면 다음과 같은 코드를 실행하면 어떻게 될까? int main() { char *str = "abc"; str[0] = 'b'; } str은 .rodata 영역에 있는 "abc"에 대한 포인터이므로 이 .. 더보기