반응형

    18장. 다차원 배열과 포인터의 관계

     

    1. 2차원 배열이름의 포인터 형

     

    int (*ptr1)[2]; // int형 변수를 가리키면서, 포인터 연산 지 sizeof(int)*2의 크기단위로 값이 증가 및 감소하는 포인터 변수 ptr1

     

    2. 배열포인터 와 포인터 배열

    int num1 =10. num2 = 20, num3=30, num4=40;
    
    int arr2d[2][4]={1,2,3,4,5,6,7,8}
    
    int * arr[4] = {&num1, &num2, &num3, &num4}; // 포인터 배열
    
    int(*arr)[4] = arr2d; // 배열 포인터 

     

    3. 2차원 배열을 함수의 인자로 전달하기

    void func( int (*parr1)[7]){
    
    ... }
    
    
    arr[i] = *(arr+i)
    
    //ex 6 의 값을 4 로 바꾸기! 
    
    int arr[3][2] = { {1, 2}, {3, 4}, {5, 6} };
    
    arr[2][1]=4;  // 아래 네개의 식 모두 동일
    
    (*(arr+2))[1]=4;
    
    *(arr[2]+1)=4;
    
    *(*arr+2)+1=4;

     

    25장. 메모리 관리와 메모리의 동적 할당

    1. C언어의 메모리 구조

     

    -  메모리의 구성 :  코드영역, 데이터 영역, 힙 영역, 스택 영역

     

       코드 : 실행할 프로그램의 코드가 저장

       데이터 영억 : 전역변수와 static으로 선언되는 변수 할당(프로그램 종료 시까지 남아있음)

       스택 영역 : 지역변수와 매겨변수 할당, 함수를 빠져나가면 소멸

       힙 역역( 프로그래머가 관리하는 메모리 공간)

       : 함수가 매번 호출될 때마다 새롭게 할당되며, 함수를 빠져나가도 유지, 프로그램 종료시 소멸, malloc & free 세트로 함수 사용 

     

       malloc : void 형 반환 ( 단지 메모리 공간 크기만 전달하므로 ) , 할당된 메모리값 쓰레기값으로 채워짐

       calloc : 할당된 메모리값 0으로 초기화

       free :  메모리 공간의 소멸 시점을 프로그래머가 직접 결정

    void * ptr1 = malloc(4); // ptr은 malloc 함수호출을 통해서 할당된 메모리공간(힙공간 4바이트) 의 첫번째 바이트를 가리킴 
    void * ptr 1 = calloc( 30, 4 ); //calloc : 4바이트 크기의 블록 30개를 힙영역에 할당 
    
    free(ptr1); // 메모리 공간 소멸
    
    // malloc 함수는  원하는 크기만큼 메모리 공간을 할당한 후 주소값을 반환합니다.
    // 그 후 void으로 변환된 주소 값을 다시 형변환하여 할당된 메모리 공간에 접근( void -> 포인터 형 지정 ) 
    
    int * ptr = (int*)malloc(sizeof(int)); 
    
    ptr = (int *)realloc(ptr, size(int)*5 ); // ptr 이 가리키는 메모리의 크기를 길이가 5인 int형 배열로 확장

     

     

    열혈 C 프로그래밍 참조

     

     

    반응형

    'C언어' 카테고리의 다른 글

    C언어 문자관련 함수와 버퍼  (0) 2020.01.16
    C언어 자료형과 기본 출력 함수  (0) 2020.01.14
    C언어 포인터와 배열  (0) 2020.01.14
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기