inflearn logo
강의

Course

Instructor

Hong Jung-mo's C Programming: Learning by Doing

11.7 Solving the Selection Sort Problem

배열과 포인터의 산술 연산

432

Syyy

8 asked

0

안녕하세요:)

 

연습 문제 구현 중, 

swap(&arr[min_idx], &arr[i]);

이 부분을

swap(arr + min_idx, arr + i);

이렇게 구현을 해봤는데, 똑같이 작동해 확인 차 여쭤보려고 질문을 달게 되었습니다.

 

전에 포인터는 산술연산이 가능하지만, 배열은 산술연산이 안된다고 하셨는데요.

여기서 arr은 배열이지만 산술연산이 가능한 것은 함수로 들어오면서 arr이라는 변수명이 포인터처럼 작동하기 때문에 가능한 것이 맞나요?

 

 

감사합니다:)

배열 c 포인터 산술연산

Answer 1

1

sohyun

배열도 산술 연산 가능합니다. 배열은 산술연산 안된다고 어느 부분에서 말씀하신 것일까요..? 😮

arr[2] 는 곧 *(arr + 2) 와도 같습니다. 즉 arr 배열의 이름은 첫번째 원소의 주소값이니까 arr + 2 는 첫번쨰 원소에서 int 공간 크기의 2칸 떨어진 곳의 주소, 즉 &arr[2] 를 의미합니다. 따라서  *(arr + 2) 는 곧 arr[2] 와도 같은 표현입니다. 

0

Syyy

답변 감사드립니다!

 

<10.4 포인터와 배열> 강의 8:35초 쯤

"배열의 이름이 포인터처럼 사용될 수 있다고 해서, 배열 이름 자체도 산술연산을 할 수 있는 것은 아니다. arr 값이 변하면 메모리를 잃어버릴 수도 있기 때문에, 배열 그 자체를 산술 연산하는 것은 불가능하다. 그러나 포인터로 바꿔준 후에 포인터 변수를 이용해 산술연산을 하는 것은 가능하다. " 라는 내용이 나오는데요.

그러면 "arr 값이 변하면 메모리를 잃어버릴 수도 있기 때문에, 배열 그 자체를 산술 연산하는 것은 불가능하다"이기 때문에, 배열 자체를 건들이지 않는다면 괜찮은 것이니, 다시 말해  "arr += 2 "와 달리 "arr + 2"은 arr 자체를 변화시키지는 않기 때문에 가능한 거 같다는 생각을 해봤는데요.

  

제 추측이 맞을까요?

Export template 안됨

1

30

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

57

3

main 함수에서 왜 int만 선언이 되는걸까요

1

57

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

55

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

138

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

94

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

114

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

79

2

c = TWO * (a+b); 에서 a와 b는?

1

60

2

; 세미콜론을 붙이는 기준에 문의

1

70

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

76

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

54

2