inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

11.8 문자열의 포인터를 정렬하기

11.8 코드 풀이

64

신유진

작성한 질문수 3

1

selectionSort 함수에서 이해가 잘 되지 않는 부분이 있습니다.

void selectionSort(char* arr[], int n)
{
	int i, j, min_idx;

	for (i = 0;i < n - 1;i++)
	{
		min_idx = i;
		for (j = i + 1;j < n;j++)
		{
			if (strcmp(arr[min_idx], arr[j]) > 0) 
				min_idx = j;
		}

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

이 함수에서 strcmp()함수를 사용할 때 * indirection을 사용하지 않고 arr[j]를 인자로 대입한 이유가 무엇인지 궁금합니다.

 

arr[j]*(arr + j)와 같아서 이미 indirection을 해준 상태라는 생각이 들긴합니다만

제 생각에는 *arr[j]이 arr 배열 안에 있는 문자열을 가리키는 것이고 arr[j]은 text segment로 저장되어 있는 문자열의 주소를 의미하는 것이 아닌가 하는 생각도 들어서요.

 

*arr[j]어떤 걸 칭하는 것인지 왜 strcmp()함수의 인자로 *arr[j]를 대입하면 작동하지 않는 것인지 궁금합니다.

c

답변 2

2

Soobak

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

*arr[j]arr[j] 가 가리키는 문자열의 첫 번째 문자(char)를 의미합니다.

예를 들어, "hello" 라는 문자열의 경우 다음과 같습니다.

arr[j] = "hello";  // arr[j]는 문자열의 첫 번째 문자를 가리키는 포인터 (char*)
*arr[j] = 'h';     // *arr[j]는 'h' (문자의 값)

이 때, strcmp() 함수의 원형은 int strcmp(const char *str1, const char *str2) 으로,
두 개의 문자열(char*)을 비교하는 함수입니다.

따라서, arr[j] 는 문자열을 가리키는 포인터(char*)이므로 strcmp() 의 인수로 적절하지만,
*arr[j] 는 해당 문자열의 첫 번째 문자(char)이므로 strcmp() 의 인수로 적합하지 않는 것입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 신유진님.

selectionSort 함수에서는 문자열 배열을 정렬하기 위해 strcmp 함수를 사용하는데요, strcmp 함수는 두 개의 문자열 포인터를 인자로 받아 그들을 비교합니다. 따라서 strcmp(arr[min_idx], arr[j])에서 arr[min_idx]arr[j]는 문자열 포인터로 전달되는 것입니다.

여기서 arr은 문자열의 포인터 배열입니다. 즉, arr[j]는 이미 문자열을 가리키는 포인터를 전달하기 때문에 추가적으로 앞에 *를 사용할 필요가 없습니다. *arr[j]arr[j]가 가리키는 문자열의 첫 번째 문자를 반환하게 됩니다. strcmp 함수는 문자열 전체를 비교해야 하기 때문에 전체 문자열을 가리키는 포인터가 필요합니다.

따라서 strcmp의 인자로는 arr[j]를 전달해야 합니다. *arr[j]를 사용하면 첫 번째 문자만 비교하는 형태가 되어 의도된 문자열 비교가 이뤄지지 않습니다.

참고로 *arr[j]는 개별 문자에 접근할 때 사용하고, 문자열 포인터는 arr[j]로 표현하여 문자열 전체에 접근하게 됩니다.

관련된 설명은 아래 유사 질문들을 참고해 주세요:
- 이중 포인터로 받는 이유

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Export template 안됨

1

11

2

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

1

54

3

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

1

56

2

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

1

54

2

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

1

49

1

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

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

137

2

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

1

60

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

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

1

112

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

68

1

Step over 기능 문의

1

53

2

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

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

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

1

62

2

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

1

64

2

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

1

53

2

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

1

53

2