전체 글(114)
-
열혈C - Chapter 18 다차원 배열과 포인터의 관계
18-1 2차원 배열이름의 포인터 형2차원 배열 이름의 포인터형은 무엇일까예를들어 int arrd[3][4];라는 2차원 배열이 있다고 했을때 이 배열의 이름의 포인터형은 무엇일까에 대해서 생각해보자.이는 꽤나 쉽지는 않다. 우리가 잘아는 1차원 배열을 두개 선언해보자.int arr[3];int arr2[4];가 있을 때 각 배열의 이름의 포인터의 타입은 int * 이다그 이유는 배열의 이름은 배열의 첫요소인 arr[0]을 가리키고 있기 때문이며 그 타입은 int형이기 때문이다.그런데 이런 방식이 이차원 배열에서는 통용되지 않는다. 2차원 배열을 하나 더 만들어보자.int arr2d[3][4];int arr2d2[3][3];과 같은 2차원 배열이 있다고 보면 우리는 배열의 길이는 상관없이 1차원 배열이면..
2024.10.18 -
열혈C - Chapter 17 포인터의 포인터
포인터는 상수, 변수의 형태를 띌수 있다.상수로는 변수의 이름을 대표적으로 볼 수 있고, 변수의 형태는 대표적으로 포인터 변수를 볼 수 있다.그런데 사실 그냥 궂이 이렇게 나눠서 이야기하지는 않는다.보통은 대부분 포인터라고 한다면 포인터 변수를 이야기 하지만 그렇지 않은 경우도 있다는걸 알아두자.여기서 이야기할 내용은 포인터 변수에 대한 내용이다. Chapter 17에서 말하고자 하는 가장 핵심이 되는 내용은 이런것이다. 이전에 int num = 12;int * ptr = #과 같이 사용했었다.여기서 ptr에 &num으로 num의 주소값을 전달해줌으로써 포인터 ptr이 num을 바라보도록 했었다.그렇다면 ???? = &ptr이 ptr의 주소값을 담는 변수의 타입은 어떻게 될까? 기본적으로 주소값을..
2024.10.13 -
열혈C - Chapter 16 다차원 배열
16-1 다차원 배열의 이해와 활용다차원 배열은 2차원 배열과, 3차원 배열을 의미한다.문법적으로는 4차원 배열이 있는데 이는 현실에 4차원 배열을 표현해야할 이유가 없기 때문에 사용되지 않는다.거기서도 보통은 2차원 배열이 대부분이고 3차원 배열은 거의 사용되지 않는다. 먼저 2차원 배열은 1차원 배열이 여러개 합쳐져 있는 형태를 띄고 그 선언 방법은 int arr[3][5];와 같이 선언을 한다. 여기서 3부분은 5의 길이를 갖는 배열의 갯수가 3개가 합쳐진 형태임을 의미한다.그냥 쉽게 생각하면 int arr[배열의 갯수][배열의 길이];라고 생각하면 된다. 이때 값에 접근하는 방법은printf("%d", arr[1][3]);와 같이 접근이 가능하고 이것의 의미는 2번째 배열의 4번째 요소에 접근한..
2024.10.13 -
열혈C - Chapter 14 포인터와 함수에 대한 이해
14-1 함수의 인자로 배열 전달하기인자의 전달에 대해서 생각해보자예를 들어 int num = 10;fct(num); //임의의 함수 fct라는 코드를 작성했다고 보자.fct에 num을 전달했다고 보통 말하는데 사실 fct에 num이란 변수를 전달할 방법은 없다.다만 인자로 전달할때 매개체가 되는 변수(매개변수)를 선언해서 num이 갖고 있는 값을 복사해서 넣어 전달하는 방법이지 num자체를 전달하는 것은 아니다.그래서 사실 정확하게 표현하려면 fct함수를 호출 하면서 num이 갖고 있는 값을 전달한다 라고 말하는게 정확하다. 그래서 이렇게 우리는 변수에 저장된 값을 전달할 수 있다.그러면 함수의 인자로 배열을 통째로 전달할 수 있을까?위에서 말한 fct에 num을 넣으면 num에 있는 값이 fct의 매..
2024.10.09 -
열혈C - Chapter 13 포인터와 배열! 함께 이해하기
13-1 포인터와 배열의 관계 먼저 배열의 형태를 보자.int arr[3];이렇게 배열 arr을 선언 했다.여기서 배열의 이름인 arr은 배열의 첫번째 요소의 주소값을 갖고 있게 된다arr이 arr[0]을 가리키는것이고 arr은 arr[0]의 주소값을 갖고 있는 상수가 된다.이 형태를 보면 int num;int* ptr;ptr = #의 코드와 비슷한 기능을 한다는 것을 알 수 있다. 여기서 포인터와 배열의 다른점은 포인터 변수의 경우는 int num1;int num2; int* ptr;ptr = &num1;ptr = &num2;와 같이 처음 넣었던 주소값을 다른 값의 주소값으로 변경이 가능하다는 점이다.그러나 배열의 경우는 arr안에 있는 arr[0]의 주소값을 변경할 수 없다. 포인터 변수는 변..
2024.10.07 -
열혈C - Chapter 12 포인터의 이해
12-1 포인터란 무엇인가?주관적인 내용이 아닌 객관적인 내용을 이해해야한다.포인터를 이용하면 메모리에 직접 접근이 가능하기에 C언어가 Low레벨언어의 특성을 지닌다고 이야기한다. 포인터는 변수가 될수도, 상수가 될 수 도 있다.그런데 당장은 뭐가 포인터 변수이고 상수임을 논하기엔 이르다.우리는 지금 당장 포인터 변수를 공부할 것이다. 그러면 포인터 변수란 무엇일까?포인터 변수란 주소값을 저장하는 변수이다.그리고 이 주소값이란 것은 정수이다.예를 들어 32bit 시스템이라면 CPU가 한번에 연산할 수 있는 데이터의 크기가 32비트이고, 한번에 이동할 수 있는 데이터의 크기가 32bit라는 것이다. 그래서 보통 32bit 시스템에서는 주소값을 32비트로 표현한다.반면에 근래에 많이 사용되는 64bit시스템..
2024.10.03