분류 전체보기 (109) 썸네일형 리스트형 '배열 포인터' 와 '포인터 배열'을 혼동하지 말자 결론적으로 '배열 포인터'은 배열 전체를 가리키는 하나의 포인터이고 '포인터 배열' 여러 포인터를 저장하는 배열이다. 배열 포인터(Pointer to an Array) 배열 포인터는 특정 타입의 배열을 가리키는 포인터이다. 이는 배열 전체를 가리키며, 주로 다차원 배열을 다룰 때 사용된다. 배열 포인터를 사용하면, 배열의 특정 요소가 아닌 배열 전체를 가리킬 수 있어, 배열의 크기나 다차원 배열의 특정 행에 접근하는 등의 작업을 용이하게 할 수 있다. int (*ptrToArray)[5]; // 5개의 정수를 가지는 배열을 가리키는 포인터 배열 포인터 예시 #include int main() { int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; int (*ptrToArray)[3] .. 2차원 배열 arr, arr[0], arr[0][0] 의 차이 상상해 보자. arr는 전체 층이 있는 건물이고, arr[0]은 그 건물의 첫 번째 층, arr[0][0] 은 첫 번째 층의 첫 번째 방이다. arr은 건물 전체를 가리킨다. 이는 건물의 주소를 알려주는 것과 같다. 건물이 어디에 있는지 알면, 모든 층에 접근할 수 있다. arr[0]은 건물의 첫 번째 층을 가리킨다. 첫 번째 층의 주소를 알고 있다면, 그 층에 있는 모든 방에 접근할 수 있다. arr[0] 자체는 2차원 배열의 첫 번째 행을 가리키는 포인터이다. *arr과 arr[0] 은 같은 기능을 한다. arr[0][0]은 첫 번째 층의 첫 번째 방이다. 이것은 구체적인 방, 즉 첫 번째 층에 있는 특정 방의 위치와 그 안에 있는 내용물(데이터)을 나타낸. arr[0][0]을 사용하면 이 방 안에 .. 2차원 배열이름의 포인터 형 1차원 배열의 포인터형 1차원 배열의 이름은 배열의 첫 번째 요소의 주소를 나타내는 포인터로 사용될 수 있습니다. 예를 들어, int arr[10];이라는 배열이 있다면, arr은 int * 타입의 포인터로 취급될 수 있습니다. 이는 arr이 int 타입의 데이터를 가리키는 포인터임을 의미합니다. int arr[10]; int *p = arr; // 배열 이름을 포인터 변수에 할당 여기서 p와 arr는 모두 배열의 첫 번째 요소를 가리키지만, arr은 배열 자체를 나타내는 상수 포인터로, 그 크기를 변경할 수 없다. 2차원 배열의 포인터형 2차원 배열의 경우, 배열 이름은 첫 번째 행을 가리키는 포인터로 사용된다. 2차원 배열은 사실 배열의 배열로, 각 행이 연속된 메모리 블록으로 저장된다. 예를 들어,.. 포인터 배열과 포인터 배열의 포인터 형 포인터 배열은 포인터들의 배열이다. 즉, 배열의 각 요소가 메모리 주소를 저장하는 포인터 변수입니다. 이를 통해 여러 위치에 저장된 데이터에 대한 참조를 배열 형태로 관리할 수 있다. 포인터 배열은 특히 문자열이나 다양한 데이터 구조의 배열을 다룰 때 유용하다. 포인터 배열의 기본 구조 타입 *배열이름[배열크기]; 타입: 배열이 가리킬 데이터의 타입 배열이름: 배열의 이름 배열크기: 배열이 저장할 포인터의 개수 #include int main() { // 문자열을 가리키는 포인터의 배열 선언 const char *days[7] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; // 포인터 배열을 이용해 요.. Chapter 14. 포인터와 함수에 대한 이해 1. 함수의 인자로 배열 전달하기 인자전달의 기본방식은 값의 복사이다 노트북에 있는 영화를 큰 스크린으로 보고 싶을 때 여러분은 어떤 방법을 쓰는가? 노트북에 있는 영화를 USB로 옮겨서 볼 수도 있고 미러링으로 볼 수도 있다. USB로 영화를 복사해서 옮기는 것은 마치 인자전달의 기본방식과 같다. 즉, 함수호출 시 전달되는 인자의 값은 매개변수에 복사가 된다. 꼭 기억해야 할 점은 복사가 되는 것 뿐이기 때문에 매개변수의 값을 변경한다고 해서 인자의 값이 변경되지 않는다는 것이다. 이것이 인자전달의 기본방식이다. #include void swap(int n1, int n2) { int temp = n1; n1 = n2; n2 = temp; printf("n1 n2: %d %d \n", n1, n2); .. Chapter 12. 포인터의 이해 주소 값의 저장을 목적으로 선언되는 포인터 변수 변수가 선언되면, 메모리 공간에 다음과 같이 할당된다. int main(void) { char letter1='A'; //char는 1바이트 char letter2='B'; int num = 10; // int는 4바이트 ... } C언어에서는 시작 번지만을 가지고 위치를 표현한다. 따라서 정수 10인 공간의 위치를 표현할 때는 이렇게 말한다. "정수 10은 0x12ff72 번지에 할당되어 있다. " 그런데 주소 값 0x12ff72 역시 정수이기 때문에 이것도 저장이 가능한 값이며, 이의 저장을 위해 마련된 변수가 '포인터 변수' 이다. 즉 포인터 변수란 메모리의 주소 값을 저장하기 위한 변수이다. 참고로 예시의 메모리 블록 주소 값은 8자리로 이루어져있는.. Chapter 13. 포인터와 배열 포인터와 배열의 관계 배열의 이름 자체는 포인터이다. 즉 메모리 블록의 시작 주소 값을 가지고 있고 출력도 할 수 있다. 단, 일반 포인터 변수는 주소 값의 변경이 가능하지만 배열의 이름은 주소 값을 변경할 수 없다. 그래서 배열의 이름을 상수 형태의 포인터라고도 하고, 포인터 상수라고 부르기도 한다. int main(void) { itn arr[3] = {0,1,2}; printf("배열의 주소 값 : %p \n", arr); // %p는 주소 값의 출력에 사용되는 서식문자이다. printf("배열의 첫번째 주소 값 : %p \n", &arr[0]); printf("배열의 두번째 주소 값 : %p \n", &arr[1]); printf("배열의 세번째 주소 값 : %p \n", &arr[2]); //a.. 문자열 관련 함수 문자열의 길이를 반환하는 함수 : strlen strlen 함수는 문자열의 길이를 반환하는 함수로, 문자열의 끝을 나타내는 널 종료 문자(\0)는 길이에 포함되지 않는다. 함수의 원형은 다음과 같이 헤더 파일 안에 정의되어 있다. size_t strlen(const char *s); 여기서 const char *s는 길이를 측정할 문자열을 가리키는 포인터이다. const 로 선언하는 이유는 읽기 전용 데이터임을 명확히 하여 실수로 문자열을 변경하려는 시도를 막기 위함이다. size_t는 부호 없는 정수 타입(Unsigned int) 과 같은 의미를 가지는데 문자열의 길이가 음수가 될 수 없기 때문이다. #include #include int main() { const char myString[] = "H.. 이전 1 ··· 9 10 11 12 13 14 다음