Programming Language/C, C++ 38

C 포인터

포인터 이해하기도 어렵고 악명높은 포인터에 대해 이야기해보도록 하겠습니다. 사전적 의미로는Point : 가리키다, 지적하다라는 의미를 갖고있습니다. 선언법은 아래와 같습니다. int *p;char *c;float *k; 와 같이 만듭니다. 그럼 일반적인 기억공간의 선언과 비교를 해보자면! 위 그림과 같이 int *p라고 선언할 때에는 p라는 이름의 주소번지를 담을 수 있는 기억장소가 만들어집니다.따라서, 이렇게 선언이 된 경우에는 p = 30; 과 같은 구문은 동작하지 않습니다. - p라는 공간은 주소번지만 담을 수 있는 공간이거든요!! - 30과 같은 정수형 변수는 넣을 수 없습니다. 주소가 아니기 때문이죠 정작 정수형 변수를 넣을 수 있는 공간은 *p라는 기억장소입니다. - *p = 30 은 된다 요..

C 비트연산자

1. 비트연산자의 종류 - 비트 연산자는 총 6가지가 있다. ~ : NOT, 1의 보수^ : XOR| : OR& : AND : 왼쪽 시프트 연산자>> : 오른쪽 시프트 연산자  2. ~ : NOT 연산자 - 해당 연산자는 다른 연산자와는 다르게 단항연산자이기 때문에 하나의 항을 가지며 결과는 1의 보수가 된다. - 예 :             변경 전                            변경 후    ~5 -> 0000 0000 0000 0101 -> 1111 1111 1111 1010 3. ^ : XOR 연산자 - 해당 연산자는 이항연산자로 특정한 비트에 대해 XOR 연산을 수행한다. - 배타적 논리합이라고도 하며 비교되는 두 대상이 같은 값이면 0, 아니면 1의 연산을 수행한다. - 예 ..

헝가리안 표기법

24.10.29. 업데이트- 헝가리안 표기법은 과거 C, C++ 에서 사용되던 변수명명법인데, 최근엔 사용하지 않는 추세입니다.- IDE가 발전하기 전, Notepad++ 등을 사용해 개발하던 때에 변수명만 봐도 타입을 바로 알 수 있게 하기 위한 목적의 표기법입니다.- 요즘은 IDE가 발전해서 변수의 타입을 쉽게 알 수 있고, JAVA, Javascript, Python 등 타입을 고려하지 않아도 되는 언어들도 많이 나와있기 때문에 사라지는 추세입니다.- 헝가리안 표기법 같이 접두어가 많이 붙는 경우에는 오히려 변수명의 가독성을 떨어뜨리는 단점, 휴먼에러가 발생할 수 있다는 단점 등등이 있습니다. 공통사항접두어데이터 타입bbyte, booleannint, shortiint, short (주로 인덱스로 ..

멀티스레드 (스레드함수)

멀티스레드, 동시에 실행되는 함수로 사실은 병렬처리되는게 아니라 멀티태스킹 스타일로 선형적(직렬) 처리가 됩니다.그런데 사람이 인지할 수 없을 정도의 직렬처리라 그냥 병렬처리되는것 처럼 보일 뿐입니다. TCP 서버/클라이언트에서도 문제점이 있는데, 스레드를 사용하지 않으면 두개의 클라이언트가 서버에 접속 할 경우 늦게 접속한 클라이언트는 메시지가 표시되지 않을 수 있다.멀티스레드를 이용하면 이런 문제를 해결할 수 있다.  1. 스레드 생성 - 윈도우에서 스레드를 생성하려면 CreateThread() 함수를 사용해야 합니다. - CreateThread() 함수는 스레드를 생성한 후 스레드 핸들을 리턴합니다, 스레드 핸들은 파일 디스크립터나 소켓 디스크립터와 비슷한 개념으로 스레드 관련 데이터 구조체를 간접..

static을 이해합시다

용어부터 살펴보아요 static : 정적인, 움직이지 않는 static의 특징 - 한번 생겨나면 프로그램이 종료될 때까지 소멸되지 않는다, 객체 소멸시점이 일정하다. - 내부 연결성 : 전역 static 객체나 함수는 외부 링크단계에서 바인딩이 발생하지 않는다.    그러니까, 컴파일 할 때 링크단계에서 외부 라이브러리가 static객체를 참조할 수 없다. - 어떤 모듈 단위라도 static 변수는 단 한번만 생성 바인딩(binding) - static을 이해하려면 필요한 개념 - extern을 통해 두 파일의 변수를 공유하는 작업을 바인딩이라고 한다 간단한 예를 살펴보겠습니다 @ header.hint global; @ a.cppint main(){   global = 3;} @ b.cppint main..