반응형
아래와 같은 배열선언과 배열값 변경 코드가 있다.
이를 포인터로 변환시키는 방법.
#include <stdio.h>
int main()
{
int arr[3] = { 0, 1, 2 };
// 배열 초기값 출력 해보기
printf("arr[0] : %d\n", arr[0]);
printf("arr[1] : %d\n", arr[1]);
printf("arr[2] : %d\n", arr[2]);
// 배열 값 변경하기
arr[0] = 10;
arr[1] = 30;
arr[2] = 50;
printf("변경된 배열 값\n");
printf("arr[0] : %d\n", arr[0]);
printf("arr[1] : %d\n", arr[1]);
printf("arr[2] : %d\n", arr[2]);
return 0;
}
반응형
<포인터로 변환하기>
#include <stdio.h>
int main()
{
// int형 포인터변수 선언 및 초기화
int* ptr = NULL;
// int형 초기값 변수 선언
int arr = 0;
// arr 주소를 ptr 포인터변수의 주소값으로 할당
ptr = &arr;
// ptr뒤 배열에 각각 값 할당 (int형이므로 +1당 4byte씩 뒤로 주소값 증가)
*(ptr + 1) = 1;
*(ptr + 2) = 2;
// 배열 초기값 출력 해보기
printf("arr[0] : %d\n", ptr[0]);
printf("arr[1] : %d\n", ptr[1]);
printf("arr[2] : %d\n", ptr[2]);
// 배열 값 변경하기
ptr[0] = 10;
ptr[1] = 30;
ptr[2] = 50;
printf("변경된 배열 값\n");
printf("arr[0] : %d\n", ptr[0]);
printf("arr[1] : %d\n", ptr[1]);
printf("arr[2] : %d\n", ptr[2]);
return 0;
}
(결과)
같은 결과가 나오게 된다.
ptr은 int형 포인터 (int*) 으로 선언했기 때문에, int형인 arr값의 주소를 받을 수 있다.
ptr = &arr; arr의 주소값을 ptr에 넣었기 때문에 아래와 같이 표현이 가능하다.
*(ptr) 은 해당 주소 내부의 값을 리턴하는 명령이다.
===============================
(알아두면 좋은 사항)
포인터에서 많이 보는 연산자는 * 일것이다.
*를 어떤타입과 어느 위치에 쓰냐에 따라서 특색이 다 다르다.
1. 곱셈으로의 역할 (아래와 숫자 사이, 숫자를 가진 변수와 연산과 함께 쓰면 곱셈이다)
int a = 1 * 2 ;
int b = a * 3 ;
2. 포인터 선언에 대한 역할 (아래와 같이 포인터로 선언할때 사용한다.)
포인터로 선언했기 때문에, 이제 ptr에는 int형 타입의 주소값을 저장할 수 있다.
int * ptr;
3. 포인터가 가리키는 값에 대한 접근 (*ptr)
// 포인터 선언
int * ptr;
int num = 1;
// ptr에 num의 주소를 대입
ptr = &num
// *ptr을 이용해서 num주소에 있는 값을 출력할 수 있음
printf("ptr value is : %d", *ptr);
// *ptr을 이용해서 가리키고 있는 값을 바꿀 수 있음 (num값을 3으로 바꿈)
*ptr = 3;
반응형
'C언어 \ C++ > 포인터 \ 배열' 카테고리의 다른 글
[C언어] 배열 내에 여러 문자열 저장하기, 출력하기 (0) | 2022.02.06 |
---|---|
[C언어] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기) (0) | 2022.02.05 |
[C언어] C언어 배열과 포인터의 관계 (변수형 포인터, 상수형 포인터), 포인터로 배열 변경하기 (0) | 2022.02.05 |
[C언어] 포인터 변수의 초기화 선언 (잘못된 사용시 위험성) (0) | 2022.02.05 |
[C언어] 포인터란? 포인터에 대해 쉽게 이해하기. (포인터 변수 사용하기, 포인터로 값 변경하기, * 연산자의 역할) (0) | 2022.02.03 |