본문 바로가기

BackEnd

포인터 변수 선언 1. 포인터 변수? 포인터 변수란 주소 값의 저장을 위해 선언되는 변수이다. 2. 주소 값 얻기(&연산자) &연산자는 피연산자의 시작 주소 값을 반환한다. 12345678910111213141516int main(void){ int num1=3; char num2='A'; double num3=3.15; printf("num1의 저장위치: %#x \n", &num1); printf("num2의 저장위치: %#x \n", &num2); printf("num3의 저장위치: %#x \n\n", &num3); printf("num1의 주소 값 크기: %d \n", sizeof(&num1)); printf("num2의 주소 값 크기: %d \n", sizeof(&num2)); printf("num3의 주소 값 크..
포인터와 메모리 1. 포인터란? 포인터는 주소값을 담고 있는 변수 또는 상수이다. 일단은 이 정도로 포인터를 정의하고 더 깊이 알기 위해 배경지식을 알아보자 (추가적으로 포인터는 참조하는 대상의 자료형 정보도 지니는데 이건 나중에 다시 볼것이다.) 2. 메모리의 주소체계 포인터가 메모리의 주소 값과 관련이 있는 만큼, 메모리의 주소체계를 알아보자 주소 값 하나가 가리키는 메모리 공간의 크기는 1바이트이다. 아래 그림에서 0x12ff73번지는 8개의 비트가 묶인것이다. 즉 주소값은 1바이트 단위로 할당이 된다. 3. 메모리의 주소 값 자체를 표현하는데 필요한 바이트 크기는? 메모리의 주소 값 자체를 표현한다는것은 메모리의 주소값을 메모리에 저장한다는 뜻인데, 표현할 주소 값의 범위에 따라 필요한 바이트 크기가 달라진다. ..
포인터 0. 포인터란? 포인터는 주소 값을 담을 수 있는 변수나 주소값을 의미하는 상수이다. 말 그대로 int변수가 있고 int 상수가 있으면 point변수가 있고 point상수가 있는것이다. 포인터 변수는 주소값을 저장하기 위한 변수이다. 그리고 포인터에는 포인터가 가리키는 메모리에 대한 정보가 포함되 어 있다. 포인터를 이용한 메모리의 접근을 위해서다. 저장된 주소값의 메모리 공간에 대한 정보도 존재. 포인터 변수는 *연산을 통한 메모리의 접근가능 16bit 시스템에서는 이 변수가 2byte(16bit)이다. 2의 16승은 65536이므로 65536개의 주소를 부여할 수 있다. 32bit 시스템에서는 이 변수가 4byte(32bit) 크기 이다. 2의32승은 4294967296개의 주소를 부여 가능, 4기가..
2차원 배열을 함수의 인자로 전달 2차원 배열을 위한 매개변수 선언방식 2차원 배열의 매개변수 선언시 반드시 위와같이 가로의(열) 길이를 명시해서 선언해야한다. 왜냐하면 앞에서도 보았지만 2차원 배열의 요소에 접근(참조 및 변경)하기 위해서는 주소값을 알아 야한다. 그리고 2차원 배열의 주소 계산법에 가로의 길이가 필요하기 때문이다. 아래의 링크를 참고하자 https://cg-developer.tistory.com/185?category=765535
1차원 배열을 함수의 인자로 전달 1. 배열 전달의 기본 원리 함수를 호출하면서 값을 전달할때 배열을 통째로 전달할 수 없다. 즉 배열을 매개변수로 선언하는 방법은 존재하지 않는다. 대신 배열의 주소 값을 전달한다. 12345678910111213141516171819void ArrPrintf(int arg[]); int main(void){ int arr[3]={1, 2, 3}; ArrPrintf(arr); return 0;} void ArrPrintf(int arg[]){ int i; for(i=0; i
2차원 배열의 각 행의 주소 계산법 2차원 배열 int arr[3][4]에서 arr[0], arr[1], arr[2]의 주소 계산법을 봐보자 배열 이름 arr은 그자체가 상수로서 0x10의 값을 지니지만 arr[0],arr[1],arr[2]는 arr을 바탕으로 계산하여 만들어진 상수 값이다. 계산방식은 아래와 같다. 배열 요소를 이루는 변수의 자료형과 배열의 가로 길이가 계산에서 가장 중요한 핵심이다. 배열의 이름은 시작 위치를 의미하고, 인덱스 값, 배열 요소 크기, 가로길이를 이용해서 시작위치로부 터 떨어져 있는 거리를 계산하게 된다.
2차원 배열과 1차원 배열의 관계 1. 관계를 왜 따져야 하는가? 자료형이 같고 길이가 동일한 1차원 배열을 여러개 묶어 놓은 것을 2차원 배열로 볼 수 있지 않을까? 1차원 배열과 2차원 배열은 분명 관계가 있다. 2차원 배열에 저장할 수 있는 문자열의 형태를 이해하고, 포인터를 더 깊이 있게 이해하기 위해 1차원 배열과 2차원 배열의 관계를 따져보자. 2. 1차원 배열 다음 3개의 배열을 선언한다고 가정해보자 int arr1[4]; int arr2[4]; int arr3[4]; 이 때에 메모리 공간에 형성되는 배열의 구조는 다음과 같다. 위 그림에서 배열의 이름 arr1, arr2, arr3는 각 배열의 주소 정보를 담고 있다. arr1, arr2, arr3는 변수와 마찬가지로 이름도 있고 , 주소값도 지니나, 배열의 이름은 변수가 ..
2차원 배열의 이해와 적용 1. 2차원 배열의 선언 2행 3열을 세로길이 2, 가로길이 3으로 나타낸다. 2. 2차원 배열의 접근 접근 위치는 [0][0]부터 시작한다. 3. 2차원 배열의 메모리 구성 2차원 배열도 메모리 공간에서는 논리적으로 1차원 구조를 갖는다. 위 그림처럼 선언의 방식은 1차,2차원 배열이 서로 다르지만, 메모리상에서 할당된 형태는 1차원의 형태로 완전히 동일하다. 다만 선언의 형태에 따라서 접근하는 방법에 차이가 있다. 4. 2차원 배열의 초기화 1) 하나의 중괄호 안에 초기화 리스트를 구성 중괄호를 하나만 사용하면 순서대로 값이 채워진다. 만약에 배열 요소의 개수보다 초기화 리스트의 개수가 적다면, 나머지 부분은 0으로 채운다. 2) 행 단위 초기화 방식 중괄호 안에 다시 중괄호를 사용해서 행 단위로 초..