포인터
-
함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
[자료구조] 함수의 매개변수로 포인터 전달함수의 매개변수로 포인터 전달 포인터는 다른 변수의 주소를 값으로 가지는 변수입니다. 포인터의 연산자 *(asterisk)는 포인터가 가리키는 값을 의미합니다. 즉, int *a = &b 로 선언했을 때 포인터 변수a는 변수b의 주소를 값으로 가지며 *a는 변수 b가 가진 값을 가리키는 것입니다. 이것을 다른 말로 'dereferncing' 한다고 말합니다. 포인터를 이야기하면 항상 나오는 개념이 배열입니다. 포인터는 배열과 매우 비슷합니다. 배열 int a[4] 를 선언했다고 합시다. 우리가 배열에 들어있는 특정 인덱스의 값에 접근하려면 a[0] = 2, a[2] = 30 등 이러한 방식으로 사용합니다. 이것은 포인터에서 *a = 2, *a = 30 과 유사합니다. 지정 영역에는 차이가 있지만 둘 다 ..
2021.04.10 -
일반적으로 어떤 변수를 출력할 때 그것은 해당 변수가 위치한 주소의 값을 출력하는 것이다. 위와 같이 a라는 것은 변수Ko가 가지고 있는 '값' 이며, a가 위치한 주소는 별도의 메모리 주소를 가지고 있는 것이다. 이러한 점에서 Ko == *&Ko 와 같은 뜻이라고 볼 수 있다. array 변수 자체는 array의 시작점 주소를 가지고 있다. 주소값을 출력해보면 Ko, &Ko[0], *&Ko 가 모두 같은 결과를 출력하는 것을 볼 수 있다. 변수 Ko 자체가 시작점 주소를 가지고 있으므로 &Ko[0]와 동일한 의미인 것이다. &와 *가 함께 있으면 서로 교차캔슬되어 *&Ko 와 Ko가 동일한 의미가 된다. 즉 *Ko == Ko[0] 이며 Ko[1]이 되기 위해서는 *(Ko + 1)로 표현 가능하다. st..
[ C언어 ] - 문자열 관련 함수를 직접 구현하기일반적으로 어떤 변수를 출력할 때 그것은 해당 변수가 위치한 주소의 값을 출력하는 것이다. 위와 같이 a라는 것은 변수Ko가 가지고 있는 '값' 이며, a가 위치한 주소는 별도의 메모리 주소를 가지고 있는 것이다. 이러한 점에서 Ko == *&Ko 와 같은 뜻이라고 볼 수 있다. array 변수 자체는 array의 시작점 주소를 가지고 있다. 주소값을 출력해보면 Ko, &Ko[0], *&Ko 가 모두 같은 결과를 출력하는 것을 볼 수 있다. 변수 Ko 자체가 시작점 주소를 가지고 있으므로 &Ko[0]와 동일한 의미인 것이다. &와 *가 함께 있으면 서로 교차캔슬되어 *&Ko 와 Ko가 동일한 의미가 된다. 즉 *Ko == Ko[0] 이며 Ko[1]이 되기 위해서는 *(Ko + 1)로 표현 가능하다. st..
2020.08.23 -
포인터는 C언어가 가지고 있는 매우 강력한 특징이다. 포인터는 어떤 것을 가리키는 변수라고 할 수 있다. 포인터는 *(asterisk)를 붙여 사용할 수 있다. *는 포인터를 선언할 때, 그리고 포인터가 가리키는 주소안의 값에 접근할 때 사용된다. int a = 10; int* p; 포인터의 선언은 위와 같이 사용한다. int형 변수 a를 가리키기 위해 int형 포인터 변수 p를 선언한 것이다. 하지만 포인터 변수p는 현재 어떤 것도 가리키지 않은 상태이다. integer의 크기는 4byte / float의 크기는 4byte / char의 크기는 1byte 이다. x64 프로세서에서 한 개의 처리 단위 메모리 주소의 크기는 8byte이고 변수a는 4byte이므로 위와 같이 차지하는 것을 볼 수 있다. 포..
[ C언어 ] - 포인터포인터는 C언어가 가지고 있는 매우 강력한 특징이다. 포인터는 어떤 것을 가리키는 변수라고 할 수 있다. 포인터는 *(asterisk)를 붙여 사용할 수 있다. *는 포인터를 선언할 때, 그리고 포인터가 가리키는 주소안의 값에 접근할 때 사용된다. int a = 10; int* p; 포인터의 선언은 위와 같이 사용한다. int형 변수 a를 가리키기 위해 int형 포인터 변수 p를 선언한 것이다. 하지만 포인터 변수p는 현재 어떤 것도 가리키지 않은 상태이다. integer의 크기는 4byte / float의 크기는 4byte / char의 크기는 1byte 이다. x64 프로세서에서 한 개의 처리 단위 메모리 주소의 크기는 8byte이고 변수a는 4byte이므로 위와 같이 차지하는 것을 볼 수 있다. 포..
2020.08.21 -
동적메모리의 2차원 배열에 관한 내용이다. int형 포인터 사이즈만큼의 공간을 8개 할당하고 그 할당된 데이터 각각의 데이터의 포인터에 int형 사이즈 6개를 할당하는 것이다. 그림으로 풀이하면 위와 같다. 가운데 8개의 데이터들은 각각 하나의 변수만큼이 6개 만큼의 위치를 포함하고 있는 어떠한 배열의 첫번째 포인터값을 가리키는 것이다. 즉 가운데 주황색 네모는 위 6개 배열의 맨 첫번째 데이터를 가리키며 그 옆 그린색 네모는 가리키는 6개 배열의 맨 첫번째 데이터를 가리키는 것이다. 이런식으로 반복되어 48개의 데이터를 만들어내어 2차원 배열을 만들어낸다. y가 0일때 x값이 0부터 5까지 증가하며 데이터를 만들어내고 x가 6이되었을 때 y는 1이 되며 다시 그 값에 해당하는 x값이 0부터 5까지 검증..
C 프로그래밍 (20) - 동적 메모리 2차원 배열동적메모리의 2차원 배열에 관한 내용이다. int형 포인터 사이즈만큼의 공간을 8개 할당하고 그 할당된 데이터 각각의 데이터의 포인터에 int형 사이즈 6개를 할당하는 것이다. 그림으로 풀이하면 위와 같다. 가운데 8개의 데이터들은 각각 하나의 변수만큼이 6개 만큼의 위치를 포함하고 있는 어떠한 배열의 첫번째 포인터값을 가리키는 것이다. 즉 가운데 주황색 네모는 위 6개 배열의 맨 첫번째 데이터를 가리키며 그 옆 그린색 네모는 가리키는 6개 배열의 맨 첫번째 데이터를 가리키는 것이다. 이런식으로 반복되어 48개의 데이터를 만들어내어 2차원 배열을 만들어낸다. y가 0일때 x값이 0부터 5까지 증가하며 데이터를 만들어내고 x가 6이되었을 때 y는 1이 되며 다시 그 값에 해당하는 x값이 0부터 5까지 검증..
2020.08.15 -
동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당받는 것이다. 프로그램에서는 효율성을 위해 필요한 만큼의 메모리를 시스템으로부터 할당받아 사용하고 사용이 끝나면 시스템에 메모리를 반드시 반납한다. 동적 메모리는 malloc()계열 라이브러리 함수를 사용해 할당받아 사용할 수 있다. malloc은 메모리를 할당하라는 의미이며 오른쪽 int형의 크기만큼 할당한다는 의미이다. int형은 4byte이므로 4를 넣어도 무방하다. 메모리를 할당 후 그부분의 주소를 가리키도록 해야하므로 (int *) integer pointer로 형변환을 시켜줌으로써 포인터 integer 변수가 해당 위치를 기억할 수 있게 해주는 것이다. pi가 NULL값이라 실패 문구가 뜬다면 exit(1)을 띄워 즉시 프로그램..
C 프로그래밍 (18) - 동적 메모리 이용하기동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당받는 것이다. 프로그램에서는 효율성을 위해 필요한 만큼의 메모리를 시스템으로부터 할당받아 사용하고 사용이 끝나면 시스템에 메모리를 반드시 반납한다. 동적 메모리는 malloc()계열 라이브러리 함수를 사용해 할당받아 사용할 수 있다. malloc은 메모리를 할당하라는 의미이며 오른쪽 int형의 크기만큼 할당한다는 의미이다. int형은 4byte이므로 4를 넣어도 무방하다. 메모리를 할당 후 그부분의 주소를 가리키도록 해야하므로 (int *) integer pointer로 형변환을 시켜줌으로써 포인터 integer 변수가 해당 위치를 기억할 수 있게 해주는 것이다. pi가 NULL값이라 실패 문구가 뜬다면 exit(1)을 띄워 즉시 프로그램..
2020.08.10 -
포인터는 기본적으로 C언의 강력한 무기이다. 포인터는 어떤것들을 가리키는, 즉 특정한 데이터가 저장된 메모리 주소를 저장하는 변수이다. 어떤 데이터의 주소 그 자체를 가리키기 때문에 이것을 응용해 다양한 연산이 가능하다. 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 때문에 즉시 값이 변경된다. temp는 포인터 x가 가리키는 위치에 값을 넣어준다. 즉 x라는 포인터가 가리키는 특정한 위치에 있는 값을 가져와서 temp에 넣어주는 것이다. 그다음 x가 가리키는 값을 y가 가리키는 값으로 바꿔주고 y가 가리키는 값에 temp를 넣어주면 완벽히 swap이 이루어진다. 메인함수에 swap함수를 가져와 매개변수로 x와 y의 주소를 입력해주면 x와 y의 값이 바뀐 것을 볼 수 있다. 만약 ..
C 프로그래밍 (13) - 포인터 pointer포인터는 기본적으로 C언의 강력한 무기이다. 포인터는 어떤것들을 가리키는, 즉 특정한 데이터가 저장된 메모리 주소를 저장하는 변수이다. 어떤 데이터의 주소 그 자체를 가리키기 때문에 이것을 응용해 다양한 연산이 가능하다. 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 때문에 즉시 값이 변경된다. temp는 포인터 x가 가리키는 위치에 값을 넣어준다. 즉 x라는 포인터가 가리키는 특정한 위치에 있는 값을 가져와서 temp에 넣어주는 것이다. 그다음 x가 가리키는 값을 y가 가리키는 값으로 바꿔주고 y가 가리키는 값에 temp를 넣어주면 완벽히 swap이 이루어진다. 메인함수에 swap함수를 가져와 매개변수로 x와 y의 주소를 입력해주면 x와 y의 값이 바뀐 것을 볼 수 있다. 만약 ..
2020.08.07