Array, Pointer 배열과 포인터
포인터
: 변수의 주솟값을 저장하는 공간
포인터 선언 : 데이터타입(int) * 포인터_변수명(b) =&변수명 (&a)
int a =10;
int*b = &a;
int* : 정수만 가리키는 포인터
& : 주솟값을 가리킴
1차원 배열과 1차원 포인터
: 1차원 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일하다.
1차원 배열일 때 배열명[요소]형태 ::a[0] , *(배열명+요소) :: *(a+1) , 1차원 포인터일 때 포인터[요소] :: p[0] 형태, *(포인터+요소) :: *(p+1)일 경우 값을 가리킴
배열의 주소 | 배열명 == 배열명[0] |
배열의 0번지 값 | 배열명[0] == *배열명 |
1차원 배열과 1차원 포인터 예시
int a[3] = {1, 2};
int *p = a; // int *p = &a[0]; 과 동일
2차원 배열과 1차원 포인터
: 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일,
2차원 배열일 때 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일 :: int a[2][2] ,a[2] *(a+2)
1차원 포인터에 대해 *과 [ ]을 이용해야 값을 가리킬 수 있다. *(a+2) == a[2]
2차원 배열과 1차원 포인터 예시
inta[3][2] = {1,2,3,4,5,6};
int*p = a[1];
a[1] == *(a+1) ,
*(a[1]) == *(*(a+1)) == **(a+1)
따라서, 위의 배열에서
*a[0], *a[1], *a[2] **a, **(a+1), **(a+2) 값은 각 각, 1,3,5 - 1,3, 5를 가리킨다.
*p, *(p+1), *(p+2) 값과 p[0], p[1], p[2] 값은 각 각, 3,4,5 - 3,4,5를 가리킨다.
2차원 배열과 포인터 배열
+ 포인터배열 = 포인터가 여러개 들어있는 구조
inta[3][2] = {1,2,3,4,5,6};
int*p[3] = {a[2], a[0], a[1]};
int*p[3] : 정수형 포인터의 배열[]
2차원 배열과 2차원 포인터
: 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일하고,
2차원 배열일 때 배열명[요소][요소], *배열명[요소], **(배열명+요소)일 경우 값을 가리킨다.
inta[3][2] = {1,2,3,4,5,6};
int(*p)[2] = a;
int(*q)[2] = a+1;
int(*p)[2] : 2차원 배열 중 2를 가리키는 포인터
-> p = a;
-> q = a+1;
1차원 배열과 문자열
: 문자열을 초기화할 때 마지막에 NULL 문자가 삽입되므로, 초기화하는 글자 수보다 1이상 큰 값으로 배열을 선언한다.
초기화할 때 배열의 크기를 명시하지 않으면, 문자열의 문자수 + 1만큼 자동으로 생성되고, printf 함수에서 %s를 이용해 문자열을 읽고 출력, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전 값까지 읽어서 출력한다.
char a[6] = "Java"; 일 경우의 예시
printf(%s)이면, * 시작점에서 NULL 직전 값까지 출력할 것!
printf(%c)이면, * 시작점의 char 하나만 출력할 것!
2차원 배열과 문자열
: 문자열 여러 개 정의할 때 2차원 배열을 사용한다. printf 함수에서 %s 이용하여 문자열을 읽고 출력하는데, printf 파라미터로 문자를 읽기 시작할 시작 주소를 알려주면 시작 주소부터 NULL 직전 값까지 읽어 출력한다.
'CS-SQL-DB' 카테고리의 다른 글
자바 자료형 활용 : ArrayList, HashSet, HashMap (0) | 2022.04.26 |
---|---|
변수의 다양한 활용 : static 변수, 배열 (0) | 2022.04.23 |
진수 변환과 ASCII 아스키코드 : 2진수 변환하기 (0) | 2022.04.21 |
[정보처리기사] 소프트웨어 개발방법론의 종류와 특징 (0) | 2022.04.18 |
[Computer Sicence] OSI 7 계층 특징과 전송단위 (0) | 2022.03.30 |
댓글