C - 배열과 포인터
0x0300 : Study/0x0304 : Programming배열과 포인터
배열명 - int ary[3];
- ary == &ary[0];
배열명 + 정수 - int ary[3];
ary + 1;
배열명과 포인터는 같다. - int ary[3];
int *pa = ary;
pa[1] =10;
배열명과 포인터는 다르다. - ary ++; (틀림)
pa ++ ; (맞음)
배열명의 정체
배열명은 컴파일 과정에서 첫 번째 배열 요소 주소로 변환
// 배열- 자료형이 같은 변수 메모리에 연속 할당
배열명이 주소인지 확인 해주는 코딩이다.
배열명은 따로 지정이 안했기 때문에 첫번째 값과 두번째 주소값이 같게 나오는 것을 확인 할 수 있다.
배열명이 요소와 첫번째 요소의 값 또한 요소가 가리키는 것이 첫번째 배열 이기 때문에 쉽게 찾을 수 있다.
배열명으로 배열 요소 사용
// 주소는 정수처럼 보이지만 자료형에 대한 정보를 갖고 있는 특별한 값이다.
// 정해진 연산만 가능
배열명에 정수 연산을 수행하여 배열 요소를 사용하는 방법 이다.
// ary[1] = *(ary + 1)
// ary[2] = ary + 2
배열명 역활을 하는 포인터
포인터가 배열명 저장하면 배열명처럼 사용 가능.
배열명처럼 사용되는 포인터이다.
// pa[2] = pa[0] + pa[1]
// *(ary + 2) = *(ary + 0) + *(ary + 1)
// 둘다 같음을 알 수 있다.
배열명과 포인터의 차이
sizeof 함수 사용 결과의 차이
//배열명에 사용시 배열 전체의 크기를 나타냄
// 포인터에 사용하면 포인터 하나의 크기를 나타냄
변수와 상수의 차이
// 포인터는 그 값을 바꿀 수 있음
// 배열명은 상수이므로 값을 바꿀 수 없음
포인터를 이용한 배열의 입출력 과정이다.
포인터의 뺄샘과 관계 연산
포인터의 뺄셈
// 포인터 - 포인터 > 값의 차 >> 가리키는 자료형의 크기
관계 연산자로 포인터의 대소관계 확인 가능
포인터의 뺄셈과 관계 연산을 코딩을 한 예제이다.
배열의 입출력을 처리하는 함수
주소를 데이터로 주면 해결
호출 - int ary[5] = {10, 20, 30, 40, 50};
print_ary(ary, 5);
정의 - void print_ary(int *pa, int size)
{
printf("%d", pa[i]);
}
배열의 값을 출력하는 함수
배열의 값 확인하기 위해 수시로 출력해야 한다면?
// 그 기능을 함수로 만들어 호출
// 함수 호출할 때는 배열명을 주고, 함수의 매개변수로 포인터 선언
// 함수 안에서 포인터를 배열명처럼 사용
배열의 값을 함수를 정의해 출력해주는 내용이다.
// print_ary 함수에서는 배열명인 ary를 사용할 수 없다. 따라서 pa값으로 반복문을 처리한 것이다.
배열 요소의 개수가 다른 배열도 출력하는 함수
배열 요소 수가 달라도 원하는 배열 출력 가능한 예제
// 함수 호출 할 때 배열명과 함께 배열 요소 수도 인자로 넘김
크기가 다른 배열을 출력하는 함수이다.
// 매개변수 size는 배열의 요소 수를 받아 저장하고 그만큼 반복을 한다.
// 출력할 배열 요소수가 바뀌어도 그에 맞춰 모든 배열 요소의 값이 출력이 가능하다는 것이다.
배열에 값을 입력하는 함수
입력 함수는 데이터를 저장할 배열의 위치가 필요하다.
// 배열에 값 입력하는 함수는 함수 안에서 포인터 직접 사용.
배열에 값을 입력하는 함수이다.
'0x0300 : Study > 0x0304 : Programming' 카테고리의 다른 글
Cpp 기초 (A+B 응용화) (0) | 2017.05.24 |
---|---|
NASM - LD 컴파일 후 실행 (0) | 2017.05.13 |
C - 포인터 (0) | 2016.06.13 |
C - 배열 (0) | 2016.06.13 |
C - 함수 (0) | 2016.06.13 |