[Dev] 포인터와 배열(Pointer & Array)

2024. 4. 1. 23:17·Dev

변수는 컴퓨터 메모리에 저장

이제까지 우리는 변수를 만들어서 사용하였습니다, 만든 변수들은 자료들을 저장하는 역할을 하므로 메모리에 저장됩니다 메모리에서는 각 바이트마다 고유한 주소가 매겨지며 이들의 주소를 사용해 메모리의 각 바이트에 접근할 수 있습니다


포인터(Pointer) 

포인터는 메모리의 주소를 가지고 있는 변수입니다 

int a = 10;       // int형 변수 a 선언
int *p = &a;      // int형 포인터 p는 a의 주소로 선언

*p += 5;       // a = a + 5와 동일

int *p = &a

  • & 연산자는 변수 a의 주소를 나타냅니다.
  • p는 a의 주소가 저장된 포인터 변수입니다
  • *p는 포인터 p가 가리키는 주소에 저장된 값, 즉 a의 값인 10을 의미합니다
  • *p += 5; 는 포인터 p가 가리키는 변수 a의 값을 5 증가시킵니다

배열과 포인터

배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 같습니다
따라서 배열의 이름은 포인터 상수(constant pointer)입니다.

int *p, a[4]={10, 20, 30, 40}; 	// int형 배열 a, 포인터 p 선언
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]); 	// 배열 요소 출력 (index)

p=a;
printf("%d %d %d %d\n", *p, *(p+1), p[2], *(p+3)); 	// 배열 요소 출력 (pointer)

p=a, 배열 이름 a는 a[0]의 주소값을 가리킨다

  • 배열의 이름은 첫 번째 요소의 주소로 해석됩니다. 이는 포인터 상수이며, 값을 변경할 수 없습니다
  • p = a;에서 p는 배열 a의 첫 번째 요소인 a[0]의 주소를 가리킵니다
  • 포인터를 사용하여 배열의 요소에 접근할 수 있습니다. *(p+1)은 a[1]의 값을 의미합니다
  • 배열과 포인터는 밀접한 관련이 있으며, 포인터를 사용하여 배열의 요소에 효율적으로 접근할 수 있습니다

문자열과 포인터

문자열은 문자의 배열로 표현됩니다
문자열을 나타내는 포인터는 배열의 이름과 마찬가지로 해당 문자열의 첫 번째 문자의 주소를 가리킵니다

char *p = "Hello"; 	// 문자열을 가리키는 포인터 p
char m[]= "world";	// 문자열을 저장할 배열 m[6] = {'w', 'o', 'r', 'l', 'd', '\0'}

printf("%s %s\n", p, m); 
p = m; 	// hello 문자열을 가리키는 포인터 p = 배열 m의 첫 번째 주소
printf("%s\n", p);

while (*p) 	// p가 가리키는 문자가 '\0'이 아닐 때까지 반복
	putchar(*p++);
printf("\n");

p=m, 문자열 이름 m은 m[0]의 주소를 가리킨다

  • char *p = "Hello" 에서 p는 문자열 "Hello"의 첫 번째 문자인 'H'의 주소를 가리킵니다
  • 문자열을 가리키는 포인터를 다른 문자열로 변경할 수 있습니다. p = m;에서 m은 문자 배열을 가리키는 포인터이며, 문자열 "world"의 첫 번째 문자 'w'의 주소를 가리킵니다.
  • while (*p)는 포인터 p가 가리키는 위치의 문자가 널 종료 문자('\0')가 아닌 경우에만 반복합니다. 이를 통해 문자열의 끝까지 순차적으로 문자를 출력합니다
  • putchar() 함수는 한 문자를 표준 출력에 출력하는 함수입니다. *p++는 포인터 p가 현재 가리키는 문자를 출력한 후에 포인터를 다음 문자로 이동시킵니다

https://www.tcpschool.com/c/c_pointerArray_relation

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'Dev' 카테고리의 다른 글
  • [Dev] 말썽쟁이 이클립스 오류해결 모음
  • [Dev] 코딩 테스트에서 자주 쓰는 입력방식에 대해 (input, split, map)
  • [Dev] 수 자료형 - 정수형, 실수형
  • [Dev] max, min 없이 리스트 최댓값, 최솟값 구하기
너굴먹
너굴먹
해랑사 을신당는 나
  • 너굴먹
    햄스터가 갱스터가 될때까지
    너굴먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (36)
      • Dev (17)
      • Computer (6)
      • Project (7)
      • CodingTest (2)
      • 일상 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python
    GithubAction
    래치
    vercel
    10진수
    코딩테스트
    실수 변환
    2진수
    RS래치
    경기도갭이어프로그램
    오답노트
    python #max #min #최댓값 #최솟값
    c라이브러리
    trunk-based
    숫자 자료형
    소수 변환
    정보처리기사
    actions secrets and variables
    R-S래치
    AWS
    Lightsail
    파이썬
    roboflow
    아이패드 m4
    정처기 필기
    필기
    cbt
    숫 자료형
    YOLOv5
    플립플롭
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
너굴먹
[Dev] 포인터와 배열(Pointer & Array)
상단으로

티스토리툴바