티스토리 뷰
안녕하세요, IT디자이너입니다.
이번 포스팅에서는 배열과 포인터의 관계에 대해서 포스팅하도록 하겠습니다.!
저번 포스팅에서는 배열의 변수 이름이 주소를 가리킨다고 말씀드린적이 있죠?
위 사진처럼 배열 변수 이름의 주소와 배열의 첫번째 인덱스의 주소는 동일합니다. 또한 배열 변수에 *(asterisk) 연산자를 사용해서 연산하였을 때 배열의 첫번째 인덱스의 요소가 출력됩니다.!! 즉, 배열은 포인터처럼 사용할 수 있고 포인터는 배열처럼 사용할 수 있습니다.
위 사진처럼 배열을 포인터처럼 사용하는 방법이 있습니다. 하지만 2번째 printf() 함수 부터는 조금 다르죠?
저번에 배열의 사용방법에 대해서 포스팅한 내용을 보시게 되면은 이러한 내용이 있을 겁니다. "배열은 메모리 내부적으로 1차원으로 존재한다" 라는 문구를요
배열의 데이터 타입의 따라서 배열의 이름에 +1을 할 때 마다 데이터 타입만큼 주소 값이 증가합니다. 즉 +1 연산이 되면은 다음 인덱스
+2 연산이 진행되면 또 그 다음의 인덱스를 가리키게되어 포인터 연산자를 활용해서 배열의 요소를 출력할 수 있게됩니다.
하지만 문자열에서는 포인터와 배열의 내부적인 차이가 존재합니다.
char *ptr = "asdf";
char str[] = "asdf;
포인터는 특정 주소를 값을 가리키고 배열은 특정주소에 값을 대입하는 방식입니다.!! 즉 char *ptr = "asdf"; 같은 경우는 "asdf"를
리터럴(Literal) 상수로 메모리 상에 올린 후 *ptr 가 해당 주소의 값을 가리키는 방식입니다.
즉, 해당 주소의 값의 변경은 불가능하며 읽기만 가능합니다.
포인터에 문자열을 대입하여 초기화하고 포인터가 가리키는 주소값을 출력 후 다시 다른 문자열을 대입한 후 포인터가 가리키는 주소값을 출력하였을 때 다른 주소가 출력되는 것을 확인할 수 있습니다.
하지만 배열은 다릅니다.
배열이 가리키는 주소는 값이 변경된다 해도 변경되지 않는 것을 알 수 있습니다. 즉, 외적으로 사용할 때는 비슷하지만 내부적으로는 매우 다르게 사용되는 것을 꼭 알고계셔야합니다.!!!!
이번 포스팅은 조금 어려울 수 있지만, 이 부분을 확실히 이해하고 넘어가셨다면은 포인터 공부에 도움이 많이 되실거라고 확신합니다.!!
감사합니다.
'Language > C 언어' 카테고리의 다른 글
C언어와 어셈블리어 !! (0) | 2020.03.18 |
---|---|
C언어의 꽃 "포인터" !! 포인터와 배열 그리고 함수 - 3 (0) | 2020.02.09 |
C언어의 꽃 "포인터" !! - 1 (0) | 2020.02.09 |
C언어의 배열 사용방법 (0) | 2020.02.09 |
C언어의 지역변수와 전역변수 static,register 변수 (0) | 2020.02.08 |
- Total
- Today
- Yesterday
- C언어 #IT디자이너
- C언어 #C++ #IT디자이너 #C++ 함수
- C언어 #IT디자이너 #C++언어
- C언어 #C++ #IT디자이너 #함수 #재귀 함수 #스택 #자료구조 #페인팅
- C언어 #C++ #시간 함수 #타이밍 맞추기 #timer interrupt #IT디자이너
- C언어 #IT디자이너 #포인터 #배열 #포인터와 배열
- 스택 #자료구조 #Stack #IT디자이너 #알고리즘 #C언어 #스택 과제 #C++
- 디버그 #Debug #Release #디버그와 릴리즈 차이 #C언어 #C++언어 #어셈블리어
- C언어 #C++ #캐시hit #캐시라인 #캐시무효화
- C언어 #C++ #switch #if #어셈블리어 #switch문 사용 이유 #IT디자이너
- C언어 #자료구조 #C++ #연결리스트 #리스트 #알고리즘 #IT디자이너
- IT디자이너 #QuickSort #퀵정렬 #C언어 #C++ #자료구조 #알고리즘
- C언어 #C++ #파일 입출력 #텍스트파일 #IT디자이너
- C언어 #포인터 #배열 포인터 #포인터 배열 #함수
- Debug #C언어 #C++ #비쥬얼스튜디오 #Release #IT
- C언어 #C++ #어셈블리어 #IT디자이너 #비트연산자 #연산자 #C언어의 비트 연산자
- C언어 #C++ #삼각함수 #IT디자이너 #문제풀이 #2진수 #16진수 #비트 #bit #비트연산자
- C언어 #포인터 #IT디자이너
- C언어 #C++ #어셈블리어 #구조체 #구조체 특징 #IT디자이너
- QUEUE #큐 #자료구조 #원형 큐 #Circle Queue #IT디자이너 #큐 과제 #C언어 #C++언어
- C언어 #C++ #어셈블리어 #재귀함수 #IT디자이너
- 어셈블리어 #IT디자이너 #C언어 #C++언어 #어셈블리 #어셈블러
- IT디자이너 #C언어 #C++ #속성지정자 #기억클래스 #IT #const #static #register #volatile #extern #auto #s
- C언어 #C++ #자료구조 #알고리즘 #IT디자이너 #버블 정렬 #BubbleSort
- C언어 #C++ #어셈블리어 #열거형 데이터타입 #IT디자이너
- C언어 #C++ #구조체 정렬 #pragma #IT디자이너
- IT디자이너 #C언어 #C++ #IT디자이너 #코딩테스트
- C언어 #스트림 #버퍼링 #표준 입출력 함수 #C++언어 #IT디자이너
- C언어 #C++ #IT디자이너
- C언어 #C++ #어셈블리어 #함수 호출 규약 #IT디자이너 #비쥬얼 스튜디오 #IT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |