1 2 3 4 5 6 | Student(char* p, int n) { cout << "메모리 할당" << endl; name = new char[strlen(p) + 1]; strcpy(name, p); number = n } | cs |
책에서 9~13번째 줄에서요
제가알기로 문자열은 스택인가? 어디에 바로 저장돼서 그 주솟값을 받아올 수 있다고 알고있는데요
9번째줄에서 "Park"의 주소값을 매개변수로 받았으면,
이미 6번째 줄에서 name은 포인터변수로 선언됐으니까, 그냥 name = &p
라고하면되는거아닌가요?
name을 동적할당으로 배열로만들고, 그 배열을 "Park"로 채워넣는과정인건가요 ?
문자열 리터럴은 정적 영역에 생성되며 수정이 불가능 - dc Cpp
아아 네네 리터럴에 바로 생성되는데, Student 클래스에서 name을 포인터변수로 선언했는데 왜 name 에서 동적할당을 또 하는건가요 ?
수정하고싶은갑지 - dc Cpp
이게 문자열리터럴이 통째로 하나의 주소값에 저장되는게 아니라 알파벳 하나 하나 각각 주소값을 가지게 되나요 ?
메모리단위로 봤을 때 한글자당 1바이트씩 차지할텐데 당연히 길이에 따라 바이트 수가 달라지겠지 - dc Cpp
아하 그래서 문자열의 길이만큼 동적할당을 해주는거군요.. 저는 A라는 주소값에 "Park"가 통째로 들어가서 그냥 이 주소값만 쓰면 되는 줄 알았습니다 _ _)
리터럴은 수정안되고 그거 복사하려고 다 뜯어오는거니까 그만한 크기가 필요한거지 - dc Cpp
근데 이게 단순 복사만할거라면 char name 이렇게 해도 되지않나요 ? 6번째줄에서 왜 포인터로 받은지를 잘 모르겠씁니다 ..
char[] 말하는건가. 이름 길이를 모르잖아 - dc Cpp
아 죄송합니다 제가 헷갈렸네요.. strcpy(name,p) 하면 p의 주소에있는 문자열이 name이 가리키는 주솟값에 복사되는거죠? 이때 name이 가리키는 주솟값은 동적할당된 배열이고... 맞나요 ?
동적할당 아니라도 할당 될걸. 아무튼 char*형 변수는 할당된 곳의 주소를 가리키고, 배열 이름도 결국 배열의 시작주소를 가리키니까. - dc Cpp
아하 감사합니다 ... strcpy(name,p)하면 name이 가리키고 있는 주소에 복사되는 것을, 저는 name자체에 복사한다고 착각했네요 _ _)
배열에 대한 시각이 달라질 때가 온거지 - dc Cpp
감사합니다 더 열심히 공부할게요 !
ㄴㄴ 놀고먹어서 경쟁대상에서 제거되어 도태한채로 머물러주셈 - dc Cpp
조까세요
온도차보소 - dc Cpp
나중에 또 여쭤볼게요 감사합니당