C언어

[C] 배열과 포인터의 관계 (변수형 포인터, 상수형 포인터), 포인터로 배열 변경하기
포인터는 크게 상수형 포인터와 변수형 포인터로 나뉠 수 있다. 결론부터 말하자면, 배열을 선언하는 변수는 "상수형 포인터" 그 외는 "변수형 포인터"이다. 배열 선언시 char arr[ ]; 이런식으로 선언하는데 실제 arr 은 상수형 포인터다. 즉 주소값을 알고있는 Lable이다. 그래서 char * arr; 이랑 똑같은 구조라 할 수 있지만, * 로 선언하면 "변수"로 선언했기 때문에 포인터 변수의 주소값을 바꿀 수 있고, char arr [ ] 으로 선언하면 상수이므로 그 주소를 바꿀 수 없다. 그리고 이 arr은 내 첫번째 배열값의 주소를 가리키고 있다. (이때 arr의 자료형이 무엇이냐? 하면 포인터이므로 char * 자료형이다 라고 한다.) - int arr[ ]; 으로 선언하면 int형크기(..

[C] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기)
문자열(string)이란, 알파벳 하나하나가 메모리상의 연속적으로 나열되며, 마지막에는 '\0' (NULL)으로 끝나는 배열이다. 위 그림과 같이 문자열을 만드는 방법은 아래와 같다. char string[11] = "hello world"; char이므로 한칸당 1byte를 사용하며, "~~"문자열 맨 뒤에 \0 (NULL)문자는 자동으로 들어가게 된다. 고로 띄어쓰기를 포함한 모든 문자들 공간과 마지막의 NULL이 들어갈공간을 포함해 11개의 공간을 선언했다. C언어로 문자열을 표현하는 방법은 대표적으로 배열선언과 포인터 선언이 있다. 배열도 "상수형 포인터"로 결국 포인터와 동일한 역할을 한다. 배열으로 선언하는 방법은 메모리공간을 미리 할당하는 방법과, 컴파일러가 문자열 길이를 보고 알아서 할당시..

[C] 문자열(string) 입출력 (puts, fputs, gets, fgets) 사용법
문자열 출력 함수로 : puts, fputs 가 있다. 출력 함수 puts - 함수 원형: int puts(const char * string) - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함. - int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다. - 자동으로 문자열 맨뒤 '\n' 개행이 붙는다. - char * 이므로 메모리상의 특정 문자열의 주소값이 그데로 전달 됨을 알 수 있다. 출력 함수 fputs - 함수 원형: int puts(const char * string, FILE * stdout) - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signe..

[C] open, close, read 함수에 대하여
파일 디스크립터(File Descriptor)란? 리눅스와 유닉스에서는 시스템을 전부 파일로 처리하여 관리한다. (하드웨어 등 모든 장치도 포함) 시스템에서 프로세스가 파일에 접근하기 위한 방법으로 파일 디스크립터(FIle Descriptor)라는 핸들이 필요하다. 해당 파일을 open할때( 해당파일에 접근할 때 ) 파일 디스크립터는 0부터 N까지 즉, 음수가 아닌 0부터 차례대로 숫자를 부여받으며, 0, 1, 2는 프로세스가 메모리에서 실행을 시작할때 기본적으로 할당되는 파일 디스크립터이다. 기본적으로 할당받는 파일 디스크립터 0번 : 표준 입력(Standard Input) / STDIN_FILENO 1번 : 표준 출력(Standard Output) / STDOUT_FILENO 2번 : 표준 에러(St..
[C] 이스케이프 문자(Escape Character)
C/C++의 이스케이프 문자(Escape Character) 또는 이스케이프 시퀀스라 부른다. 백슬래시(\)와 특정문자(알파벳,',? 등)를 결합하여 언어특성상 표현할 수 없는 기능, 문자를 표시해준다. 백슬래시는 \이지만 키보드에는 백슬래시가 없고 ₩로 대체한다. \와 ₩는 같은 의미이니 참고 바람 https://arer.tistory.com/95

C언어로 객체지향 주 4개의 요소 (추상화,다형성,상속,캡슐화) 구현하기
추상화 (클래스) 비슷하게 생긴 Cpp과 C를 비교해보자. Cpp는 class를 이용해서 class에서 사용할 상태와 메서드들을 선언할 수 있다. 반면 C의 struct에서는 오직 상태만을 저장할 수 있다. 일반적으로 C에서 struct에 관한 함수들을 작성한다면, 이름으로 특정 구조체와 관련된 함수임을 나타낸다. 예를 들어 x, y, width, height를 변수로 가지는 Rect라는 구조체가 있다면, 아래와 같이 파일을 작성하는 것이 일반적이다. /* rect.h */ struct Rect { unsigned int x; unsigned int y; unsigned int width; unsigned int height; }; void rect_move(struct Rect *rect, unsign..