연습문제(문자열)#2 질문있습니다.
#include <iostream>
using namespace std;
//문제2 문자열 복사 함수
char* StrCpy(char* dest, char* src)
{
int i = 0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return dest;
}
int main()
{
const int BUF_SIZE = 100;
char a[BUF_SIZE] = "Hello";
char b[BUF_SIZE] = "World";
StrCpy(b, a);
cout << b << endl;
}
안녕하세요 강사님
최근 연습문제 풀다가 질문있어서 올리게 되었는데요, 3가지 질문드립니다.
질문1
함수 char* StrCpy(char* dest, char* src) 부분에서 함수 자료형이 char*이면 return을 받을때 &rest가 아닌 그냥 rest받는 이유를 알려주세요. 혼자 계속 고민하다가 도저히 모르겠어요 ㅠㅠ
질문2
함수 char* StrCpy(char* dest, char* src)에서 매개변수가 char* 되어있으면 StrCpy(b, a)가 아닌 StrCpy(&b, &a)로 받아야되는 것아닌가요?
질문3
마지막으로 cout << b << endl;에서 b를 출력하면 b[0]만 출력하는줄 알았는데 나머지 배열 전체값이 출력되는 원리 좀 알려주세요.
끝으로 제가 강사님 강의 듣고 많은 도움이 되고 있는데 c++은 사실 이번이 처음이어서 그런지 많은 어려움이 있습니다. 특히 포인터로 들어가면서 더더욱 힘들더라구요ㅜㅜ 포인터 부분 어떻게 극복하면 좋은지 약간의 조언좀 해주시면 감사하겠습니다.
답변 1
0
포인터는 누구한테다 어렵습니다 ㅎㅎㅎ
제 경우 어셈블리 언어를 공부하니 저절로 포인터를 이해하게 되었는데요.
그 전엔 C++ = 포인터 = 코딩 = 극혐 공식이 성립했었고
대학교 때 코딩에 흥미를 못 느끼고 스타2 + 디아3 + 와우만 열심히 한 이유이기도 합니다
질문1) &dest가 아닌 dest를 반환하는 이유
char*는 [주소값을 담는 바구니인데, 주소를 타고 가면 char가 있을 것]이라는 의미라 했죠?
dest 타입 자체가 char* 타입이고 반환할 타입도 char*이기 때문에,
별도로 주소를 추출할 필요 없이 dest 자체가 [주소값]입니다.
&dest를 하게 되면 char** 타입이 되며
char**이란 [주소값을 담는 바구니인데, 주소를 타고 가면 char* 즉 주소값이 있다]는 의미가 됩니다.
질문2) char* dest, char* src에서 매개변수가 char*이니 왜 StrCpy(&b, &a)가 아니냐?
역시 타입을 일치시켜줘야 하는데요.
char a[BUF_SIZE] = "Hello";
char b[BUF_SIZE] = "World";
에서 a, b 즉 [배열의 이름은 곧 배열의 시작 주소이다]라는 법칙에 의해
a, b 는 char* 타입입니다. 따라서 1과 마찬가지로 이미 타입이 일치하기 때문에
&a, &b를 해줄 필요도 해서도 안됩니다. &a, &b는 char**이 되기 때문이죠.
질문3)
cout의 operator<<가 그렇게 overloading 되어 있습니다.
크게 중요한 부분은 아니라 넘어가셔도 됩니다.
0
[배열의 이름은 곧 배열의 시작 주소이다]라고 하셨는데, 그럼 dest는 &dest[0]으로 바꿔 쓰거나 StrCpy(b, a);는 StrCpy(&b[0], &a[0]); 으로 바꿔써도 되는 건가요? 실제로 둘다 후자로 바꿔쓰고 비주얼 스튜디오로 디버깅해보니 똑같이 'Hello'로 나옵니다.
#include <iostream>
using namespace std;
//문제2 문자열 복사 함수
char* StrCpy(char* dest, char* src)
{
int i = 0;
while (src[i] != '\0')
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
return &dest[0];
}
int main()
{
const int BUF_SIZE = 100;
char a[BUF_SIZE] = "Hello";
char b[BUF_SIZE] = "World";
StrCpy(&b[0], &a[0]);
cout << b << endl;
}
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
560
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
536
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
475
1
클래스 타입의 포인터 질문합니다
0
560
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
390
1
포인터 관련 질문합니다!
0
272
1
Unable to start assembler. Check your settings.
0
849
2
cpu선택
0
549
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
415
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
317
0
스택 프레임 질문합니다!
2
312
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
312
1
함수객체 의 매개변수
0
366
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
359
1
스택 오버플로우
2
801
1





