#include <stdio.h>

int main()
{
    float f[5];

    if(f == &f[0])
    {
        /* 항상 이곳이 실행된다 */
    }

    return 0;
}
f는 배열의 이름이며, &f[0]은 첫번째 원소의 주소다.

포인터를 이용한 배열 사용
#include <stdio.h>

int main()
{
    // 배열을 정의
    int nArray[10];
    int* p = &nArray[0];

    // 배열을 탐색하면서 값을 넣는다.
    for(int i = 0; i < 10; ++i)
    {
	*(p + i) = i;
    }

    return 0;
}

  • p + i 는 괄호에 쌓여있기 때문에 제일먼저 계산이 된다.
  • *(p + 1)이라고 해주면 i 번째 원소 자체를 의미하게 된다. 즉 nArray[i]와 똑같은 의미가 되는 것이다.
    • *(p + 3) == p[3]
    • *(p + 0) == p[0]
  • 포인터는 다른 원소를 가리키게 변경할 수 있지만, 배열의 이름은 항상 첫번째 원소의 주소만을 의미하는 상수라는 점이다. 즉, nArray++ 같은 것은 불가능하다.

배열을 가리키는 포인터

#include <stdio.h>

int main()
{
    long lArray[20];

    /* 포인터가 배열을 가리킴 */
    long (*p)[20] = &lArray;

    /* 포인터를 통해서 배열 사용 */
    (*p)[3] = 300;

    /* 결과 확인 */
    printf("%lArray[3] = %d\n", lArray[3]);
    
    return 0;
}
  • []연산자가 * 연산자보다 우선 순위가 높다.
  • long* p[20]이라고 써주면 p[20]이 먼저 해석, long* 타입의 원소 20개를 갖는 배열을 정의 한다.
  • 괄호를 사용해서 우선 순위를 바꿔줄 필요가 있다.
  • 그럼 *p가 먼저 해석이 되기 때문에 long타입의 원소 20개를 갖는 배열의 대한 포인터가 정의 된다.
저작자 표시
신고

'컴퓨터 언어 > C' 카테고리의 다른 글

Static 변수  (0) 2013.02.25
메세지 기법  (0) 2013.01.16
배열의 이름은 첫번째 원소의 주소이다.  (0) 2012.12.20
문자열, 그것은 배열.  (2) 2012.06.11
Makefile을 작성하자.  (2) 2012.06.10
다수의 소스 컴파일을 도와줄 Make  (2) 2012.06.10


티스토리 툴바