$bash

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' 카테고리의 다른 글

NASM - LD 컴파일 후 실행  (0) 2017.05.13
GDG DevFest 요약?  (0) 2016.12.20
C - 배열과 포인터  (0) 2016.06.14
C - 포인터  (0) 2016.06.13
C - 배열  (0) 2016.06.13
C - 함수  (0) 2016.06.13