반응형

C 13

- 연결리스트 -

쉽지만 어렵고도 이해하기 힘든것중에 하나 인것같다. -단순 연결리스트 연결리스트와 동적배열은 완전히 용도가 같은 자료구조로서 서로 대체가능하지만 구성원리나 관리방법은 질적으로 다르다. 연결리스트의 대체 자료구조는 배열이 아니라 동적 배열이다. 연결리스트의 요소인 노드는 데이터 외에 연결상태에 대한 정보인 링크를 추가로 가져야 한다. 자기 다음의 요소가 누구인지를 스스로 기억하고 있어야 흩어져 있는 노드들의 순서를 알수 있는데 이 연결 정보를 저장하는 것이 바로 링크이다. 링크를 하나만 가지는 것을 단순 연결리스트라하고 두개의 링크를 가지는 것을 이중연결 리스트하고 한다. 노드를 구성하는 데이터와 링크는 타입이 다르기 때문에 노드는 이형타입의 집합체인 구조체로 정의 된다. struct Node { int ..

C 2010.12.29

- 동적배열 - malloc()

배열은 C언어가 제공하는 가장 기본적인 자료 구조이며 워낙 단순하기떄문에 누구나 쉽게 익숙해질수 있다. 배열의 장점은 두가지로 나눌수 있다. 첫번째는 구조가 단순 하기때문에 정보자체를 기억하는 메모리외에 추가로 소모하는 메모리가 전혀없어서 공간효율이 좋다. 둘째로 아무리 배열크기가 커지더라도 검색속도가 일정하다는것이다. 이러한 장점에도 단점이 있는데 배열요소가 연속된 메모리공간에 배치되어 있어야 하므로 중간의요소를 삭제하거나 새로운 요소를 삽입할수 없다는 것이다. 배열은 일반적으로 삽입, 삭제가 안되는것으로 알려져 있다. 하지만 이것은 일종의 고정관념이다. 방법을 찾아보면 불편하기는 하지만 불가능 한것은 아니다. 중요한것은 미리 선언해놓은 크기이상 집어넣기가 불가능하다. 소스를 고치면되지만 불편하다. 만..

C 2010.10.21

- 함수 포인터 , void형 포인터 -

프로그래머가 정의한 모든 함수는 프로그램 실행 시 메인 메모리(main memory)에 올라가게 된다. 메모리 상에 올라간 다음에 실행이 가능하기 때문이다. 이때 함수의 이름은 메모리 상에 존재하는 함수의 위치를 가리키는 주소 값을 의미한다. 즉, "함수의 이름은 메모리상에 존재하는 함수의 위치를 가리키는 포인터"이다. 그럼 함수의 이름이 주소 값을 지니는 포인터라면, 함수의 이름과 동일한 타입의 포인터 변수를 선언해서 그 값을 저장할 수 있지 않을까? 이러한 기능을 하는 포인터를 가리켜 함수 포인터라 한다. (2) 함수 포인터의 포인터 타입은 어떻게 되는가? 함수 이름의 포인터 타입을 결정짓는 요소는 리턴형과 전달인자다. int fct1 (int a) // 맨 왼쪽은 리턴형, 맨 오른쪽 괄호 안은 전달..

C 2010.10.20

- #pragma -

일단 전처리 명령어 인것을 알아두자. 컴파일할대 플랫폼이 틀려지거나 CPU가 틀려지건자 하면 컴파일 옵션을 주게되는데 pragma 가 그런 역활을 한다. 옵션을 보면 once : 해당 소스가 한번만 include되게 하여 여러번include되는것을 컴파일러 차원에서 막아준다. 즉 컴파일 시간을 줄일수 있다. comment(lib, *) : comment로 사용할수 있는 명령은 여러개가 있는데 그중 대표적인것이 lib 이므로 해당 라이브러리를 링크 시켜준다. data_seg : dll에서 데이터를 공유하고자 할때 사용된다. warning : 특정 warning을 체크하지 않는다. 예)warning(disable : 4705) => 4705번 warning은 나타자지 않는다. message : 컴파일시 특정..

C 2010.10.20

- 비트 연산자 -

-2-다.비트 연산자 비트 연산자는 논리 연산자와 비슷하지만 비트를 연산 대상으로 한다는 점이 조금 다르다. 비트(bit)란 기억 장치의 최소 단위로서 1 또는 0을 기억하며 8개의 비트가 모여야 1바이트가 된다. 32비트의 정수 1234는 16진수로는 0x4d2이며 메모리에 다음과 같이 기억된다. 32비트이므로 32개의 비트가 있고 이 각각의 비트가 1이나 0을 기억함으로써 1234라는 숫자 하나를 저장하는 것이다. 비트 연산자는 이 그림에서 각 격자인 비트들을 대상으로 조작을 한다. 비트가 연산대상이라는 말은 두 피연산자의 대응되는 비트끼리 연산해서 그 결과를 리턴한다는 뜻이다. 일상 생활에서 쓰는 십진수와는 다른 이진수 차원의 연산이라 다소 어려운 것처럼 보이겠지만 막상 다 이해하고 나면 이진수만큼..

C 2010.10.18

- goto문 -

일단 goto문의 가장 큰 단점은 프로그램의 흐름을 복잡하게 만든다. goto문의 사용은 가급적 자제하는 것이 좋다는 의견이 많다. goto문은 이동할 위치를 지정 해놓고 지정된곳으로 이동시켜주는 함수이다. 이동할 위치를 의미하는 레이블을 선언 해야하며 goto문을 통해서 이동할 레이블을 지정 해주면 되는 것이다. 예를한번 보자.ㄴ #include int main() { int num; printf("숫자 입력 : "); scanf(%d", &num); if(num == 1) goto label1; //label1이라는 레이블로 이동하라는 의미이다. elseif(num == 2) goto label2; //label2이라는 레이블로 이동하라는 의미이다. else goto label3; //label3이라..

C 2010.10.18

함수 -

(열강 연습문제) //화씨 섭씨를 구하는 문제. #include float FHH(float a); float cel(float b); int main() { int n; float a = 0; float b = 0; while(1) { printf("\n"); printf("섭시입력 1번 § 화씨입력 2번 § 종료 0번 :"); scanf("%d", &n); switch(n) { case 1: printf("섭씨 입력 :"); scanf("%7f",&a); printf("화씨는 %3f 이다.\n\n", FHH(a)); break; case 2: printf("화씨 입력 :"); scanf("%7f",&b); printf("섭씨는 %3f 이다.\n\n", cel(b)); break; case 0: pri..

C 2010.08.06

포인터

(동규글펌) 포인터 #include int main() { int a= 100; // int형 변수 a 를 100으로 초기화 int *p; // int형 포인터변수 p 선언 p=&a; // 포인터변수 p에 a의 주소값 대입 *p=0x99; // *연산자를 통해 포인터변수 p가 참조하고 있는 주소의 값을 16진수 99로 초기화 *((int*)(0x22ff54))=0x77; // *연산자를 통해 0x22ff54 번지를 int형 포인터 타입으로 선언과 동시에 16진수 // 77로 초기화 printf("%x\n",a); // a의 값을 16진수로 출력 printf("%x\n",p); // p의 값을 16진수로 출력 printf("%x\n",&a); // a의 주소값을 16진수로 출력 printf("%x\n",&..

C 2010.08.06

배열

◎배열◎ 배열이란? -배열이란 같은 데이터형을 가진 변수들의 연속적인 집합이라고 할수있으며 배열은 많은양의 데이터를 처리하는 경우 유용하게 사용할수 있다. 또 배열은 메모리가 연속적이기 때문에 배열의 시작주소를 알면 모든 배열 요소를 접근 할 수 있다. 한마디로 배열은 연속적인 메모리의 할당이라는것임. -배열선언에 필요한 세가지 1) 배열 길이 : 배열을 구성하는 변수의 개수 (반드시 상수를 사용) 2) 배열 요소 자료형 : 배열을 구성하는 변수의 자료형 3) 배열 이름 : 배열에 접근할 때 사용되는 이름 * 배열 요소의 위치를 표현 : 인덱스(index) (구조) int형으로 array라는 이름을 선언해주고 int형 데이터 6개를 저장할 수 있는 메모리공간을 4byte씩 총 24byte만큼 할당해주소~..

C 2010.06.18
반응형