C 언어 정적 링크 와 동적 링크

1.정적 링크
구조 체 중의 구성원 은 각종 유형의 지침 변수 일 수 있다.한 구조 체 중 하나 또는 여러 구성원 의 기본 유형 이 본 구조 체 유형 일 때 이런 구조 체 를'자신의 구조 체 를 인용 하 는 것'이 라 고 부른다.예:

    struct link
    {
      char ch;
      struct link *p;
    } a;
p 는 struct link 형식 변 수 를 가리 킬 수 있 는 포인터 구성원 입 니 다.따라서 a.p=&a 는 합 법 적 인 표현 식 으로 구 성 된 저장 구 조 는 그림 1 과 같다.

그림 1 자신의 구조 체 참조
예 1 간단 한 링크

#include <stdio.h>

struct node
{
  int data;
  struct node *next;
};
typedef struct node NODETYPE;

int main()
{
  //a    ,b     ,c    
  //h     NODETYPE   ,     
  //p     NODETYPE   ,      
  NODETYPE a, b, c, *h, *p;
  
  //     data  
  a.data = 10;
  b.data = 20;
  c.data = 30;
  
  //     
  h = &a;
  a.next = &b;
  b.next = &c;
  c.next = '\0';
  
  //  p,      a、b、c,    data   
  p = h;
  while (p)
  {
    printf("%d\t", p->data);
    p = p->next;  //p    
  }
  printf("
"); return 0; } STRUCT_LIST
STRUCT_LIST
상기 프로그램 에서 정 의 된 구조 체 유형 인 NODETYPE 는 모두 두 명의 구성원 이 있 습 니 다.구성원 data 는 정형 입 니 다.멤버 넥 스 트 는 포인터 타 입 이 고 기본 타 입 은 NODETYPE 타 입 입 입 니 다.
a,b,c 는 NODETYPE 구조 체 유형 변수 이 고 h 와 p 는 NODETYPE 구조 체 유형 을 가리 키 는 지침 변수 이다.프로그램 을 실행 한 후 그림 2 와 같은 저장 구조 체 를 형성 합 니 다.포인터 h 에 변수 a 의 주 소 를 저장 하고 변수 a 의 구성원 a.next 에 변수 b 의 주 소 를 저장 합 니 다.마지막 변수 c 의 구성원 c.next 는'\0'(NULL)으로 설정 합 니 다.이렇게 하면 같은 유형의 구조 체 변수 a,b,c 를 연결 시 켜 이른바'링크 표'를 형성 하고 변수 a,b,c 를 링크 표 의 노드 라 고 부른다.
이 예 에서 연 결 된 모든 노드(구조 체 변수 a,b,c)는 정 의 를 통 해 시스템 이 메모리 에 고정 적 이 고 연속 적 이지 않 은 저장 부 를 열 었 다.프로그램 이 실행 되 는 과정 에서 인위적으로 새로운 저장 소 를 만 들 수도 없고 개 설 된 저장 소 를 사라 지게 할 수도 없다.이런 체인 시 계 는 정적 체인 시계 가 된다.

그림 2 링크 저장 구조 설명도
2.동적 링크 의 개념
지금까지'대량'데 이 터 를 처리 할 때 우 리 는 모두 배열 을 이용 하여 저장 했다.배열 이 반드시(명시 적 또는 내포 되 어 있 는)요소 의 개 수 를 가리 키 도록 정의 하여 하나의 배열 에 저 장 된 데이터 양 을 제한 합 니 다.실제 응용 프로그램 에서 프로그램 이 실 행 될 때마다 처리 해 야 할 데이터 의 수 는 일반적으로 확실 하지 않다.배열 정의 가 작 으 면 데 이 터 를 저장 할 공간 이 충분 하지 않 고 정의 가 크 면 저장 공간 을 낭비 합 니 다.
이런 상황 에 대해 프로그램 수행 과정 에서 수요 에 따라 수시로 저장 공간 을 열 수 있 고 필요 하지 않 을 때 수시로 방출 하면 저장 공간 을 비교적 합 리 적 으로 사용 할 수 있다.C 언어의 동적 저장 소 분 배 는 이러한 가능성 을 제공 했다.매번 동적 으로 분 배 된 저장 장치 의 주 소 는 반드시 연속 적 인 것 이 아니 라 처리 해 야 할 대량의 데 이 터 는 하나의 전체 이 고 각 데이터 간 에 연결 관계 가 존재 한다.링크 의 모든 노드 에 데이터 자 체 를 저장 하 는 데이터 도 메 인 을 제외 하고 적어도 하나의 포인터 도 메 인 이 있어 야 합 니 다.이 를 통 해 다음 노드 요소 의 주 소 를 저장 하고 이 지침 을 통 해 각 노드 를 연결 할 수 있 습 니 다(그림 3 참조).링크 의 모든 저장 부 는 동적 저장 소 에서 분배 되 기 때문에 이런 링크 를'동적 링크'라 고 부른다.
강조해 야 할 것 은 동적 링크 에서 모든 노드 는 자신의 이름 이 없고 포인터 로 노드 간 의 연결 관 계 를 유지 할 수 밖 에 없다 는 것 이다.어떤 노드 의 지침 이 끊 어 지면 후속 노드 는 더 이상 찾 을 수 없다.

그림 3 머리 결 점 이 있 는 단 방향 링크
모든 링크 는 하나의'헤드 포인터'변 수 를 사용 하여 링크 의 시작 을 가리킨다.그림 3 의 head 와 같다.헤드 에 체인 테이블 의 첫 번 째 노드 의 주 소 를 저장 한 것 이다.이 링크 에서 우 리 는'헤드 노드'를 설 치 했 는데 이 노드 의 데이터 필드 에 데 이 터 를 저장 하지 않 습 니 다(수요 에 따라 헤드 노드 를 설정 하지 않 아 도 됩 니 다).링크 의 마지막 노드 의 포인터 도 메 인 은 주 소 를 저장 하지 않 고'\0'(NULL)값 으로 설정 하여 링크 의 끝 을 표시 합 니 다.상기 링크 의 모든 노드 는 하나의 지침 도 메 인 만 있 고 모든 지침 도 메 인 은 다음 노드 의 주 소 를 저장 합 니 다.따라서 이런 링크 는 현재 노드 에서 만 후계 노드 를 찾 을 수 있 기 때문에'단 방향 링크'라 고 부른다.

좋은 웹페이지 즐겨찾기