int main()
{
char asdf[] = "asdf";
char* asdf0 = asdf;
std::cout << asdf << asdf0;
return 0;
}
문자열과 문자열 가르키는 포인터를 출력하는 이 코드는 asdfasdf로 정상 출력 되던데
int main()
{int asdf[4] = { 1,2,3,4 };
int* asdf0 = asdf;
std::cout << asdf << asdf0;
return 0;
}
이렇게 정수 배열과 그 포인터를 출력하는거는 주소값이 출력됨 이거 출력하려면 for문 같은거 이용해야 할탠데
문자열은 char 형식의 배열로 알고 있는데 왜 문자열은 주소값이 아니라 멀쩡하게 문자열로 출력되는지 궁금함
내가 잘못 공부했나 해서 배열이랑 포인터 부분 다시 살펴봤는데 모르겠음 빡대가리라 설명좀
함수 오버로딩 때매 ㅇㅅㅇ 아래꺼 char*형으로 캐스팅해서 다시 해보셈
물론 숫자는 대충 아스키에 맞게 때려넣고
이해를 잘 못했는데 대충 형변환 해보래서 (char*) asdf 이런식으로 출력해 봤는데 깨져서 나옴 숫자를 아스키에 맞게 때려넣으라는게 뭔소리임? 그리고 내가 아는 함수 오버로딩은 같은 이름의 다른 매개변수 가진 함수 여러게 만드는걸로 아는데 이거랑 또 뭔상관이고? c 대충 기초만 공부하고 c++ 공부 시작중인 빡대가리라 지식과 이해력이 딸림 이거도 강좌보다가 문자열 그냥 출력하길레 궁금해서 올린거고
char*를 넘겼을때 문자열이 출력되는건 cout 자체가 오버로딩으로 char* 타입에 대해 문자열이 출력되도록 함수가 작성됐기 때문임. 근데 int*형은 그런게 아니기 때문에 그냥 주솟값 그 자체가 출력됨. 내가 순간 착각해서 char*로 캐스팅하란건 메모리 사이즈가 다르기 때문에 저대로 안될거고.. int형 변수에 65란 값을 넣어놓고 그냥 cout 해보고 char로 캐스팅 한 다음에 cout 해보셈. 그럼 차이가 느껴질거다
아 그냥 특별취급 같은거네 이해했음 아스키 변환은 그냥 그 숫자에 대응되는 아스키 코드 출력되는거고 답변 감사드림
비슷하게 string도 오버로딩 되어있고 그럼. 예전엔 c에서 printf로 일일이 프로그래머가 출력 형식 지정해줬던걸 이제 언어가 알아서 해준다고 생각하면 된다