반응형
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 |