티스토리 뷰
* 포인터가 어렵게 느껴지는 이유
- 포인터 그 자체도 '변수(메모리)' 이기 때문
- 포인터 자체의 주소가 있고, 변수로서 저장된 주소도 있어서... 두 개의 주소가 공존하기 때문
- 대상에 대한 형식(설명)은 있으나, 개수는 없다. 대상의 유효성 확인이 없다
(포인터가 가리키는 자료형 데이터는 1개일수도 있고 연속된 여러개일 수도 있다)
- 개발자 스스로 잘 지켜라. 자유도는 높고 위험성은 높다
ex)
int aList[3] = {0};
int *pList = aList;
--- ------
2 1
순서와 해석
1 ---> pList는 포인터다.
2 ---> 포인터 pList가 가리키는 대상은 자료형식 int이다.
ex)
int** *ppList = 0;
----- -------
2 1
순서와 해석
1 ---> ppList는 포인터이다.
2 ---> 포인터 ppList가 가리키는 대상은 자료형식 int**이다.
-----------------------------------------------------------------------------------
ex)
char *apList[3] = { "Hello", "World", "Strin" };
------ --------
2 1
순서와 해석
1 ---> 요소가 3개인 배열 apList가 있다.
2 ---> 요소형식은 char* 형식이다
char* | char* | char* |
포인터이므로 주소가 저장될 것이고,
어딘가에 저장된, H 와 W 와 S 의 주소일 것임.
H | e | l | l | o | \0 |
W | o | r | l | d | \0 |
S | t | r | i | n | \0 |
-------------------------------------------------------------------------------------
* 주소연산과 간접지정연산은 서로 정반대 개념의 연산자 !
- 이 두 연산자가 괄호 안이나 밖에서 연속될 경우 무시 가능!
ex)
char* astrList[3]이 선언되었고,
&astrList[1]이 연산수행되었다면,
연산의 결과는 char** !
&astrList[1] ---> &*(astrList + 1) ---> &* 상쇄 ---> astrList + 1
그리고 astrList의 자료형은 char* [3] 또는 char** 이므로, &astrList[1]의 자료형은 char** (??)
-------------------------------------------------------------------------------------
ex)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
char ch = 'A';
char *pData = &ch; //char자료형 포인터변수 pData에는 ch변수의 주소
char* *ppData = &pData; // char포인터 자료형 포인터변수 ppData에는 pData변수의 주소
char** *pppData = &ppData; // char포인터의 포인터 자료형 포인터변수 pppData에는 ppData변수의 주소
printf("%c\n", ch); // char 변수 ch의 값을 찍으니 A
printf("%c\n", *pData); // pData 변수를 찾아 내용을 참조해서 그 주소의 값을 찍으니 A, pData변수값을 찍으면? ch주소
printf("%c\n", **ppData); // ppData 변수를 찾아 내용을 참조해서 그 주소값을 한번 더 참조해 가서 값을 찍으니 A,
// ppData변수값을 찍으면? pData주소
printf("%c\n", ***pppData); // pppData 변수를 찾아 내용을 참조해서 그 주소값을 한번 더 참조해 가서 또 한번 더 참조해 가서 찍으니 A,
// pppData변수값을 찍으면? ppData주소
return 0;
}
---------------
결과)
A
A
A
A
'Test > C' 카테고리의 다른 글
메모리와 포인터6 : 변수와 메모리 (0) | 2018.12.23 |
---|---|
메모리와 포인터6 : 다차원 배열에 대한 포인터 (0) | 2018.12.23 |
메모리와 포인터4 : 메모리 복사 (0) | 2018.12.20 |
메모리와 포인터3 : 메모리 동적 할당 및 관리 (0) | 2018.12.19 |
메모리와 포인터2 : 포인터와 배열 (0) | 2018.12.17 |
- Total
- Today
- Yesterday
- 정렬
- sysprep
- 중복제거
- 3par
- LIST
- 제곱
- vmware
- powercli
- dp-2
- 읽어오기
- exadata
- EXA
- virt-sysprep
- fromkeys
- 변수화
- 스토리지
- cloud-init
- set()
- insert
- dp-1
- storage
- 부동없이
- 대소문자
- Join
- 배열
- powershell
- oracle
- 차집합
- Append
- vmware.powercli
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |