void 포인터는 함수로 어떤 데이터가 들어올 지 모르는 상황에서 사용한다.
void func(void* pData) { char* pChangeData = (char*)pData; int temp = 'j'; for(int i=0; i<=9; ++i) { pChangeData[i] = temp--; } } int main() { char* a = new char[10]; int temp = 'a'; for(int i=0; i<=9; ++i) { a[i] = temp++; } cout << a << endl; func(a); cout << a << endl; return 0; }
위의 코드의 결과는
abcdefghij
jihgfedcba
로 나온다.
void 포인터로 인자를 받아오는 경우, func함수에서처럼, 인자로 받아온 데이터의 자료형으로 변환을 해주어야 한다.
- 이를 이용한 FileStream class 작성
void CFileStream::Read(void * pData, int iSize) { if (!m_bOpen) return; fread(pData, iSize, 1, m_pFile); } void CFileStream::ReadLine(void * pData, int & iSize) { if (!m_bOpen) return; char cData; char* pChangeData = (char*)pData; iSize = 0; while (feof(m_pFile) == 0) { fread(&cData, 1, 1, m_pFile); if (cData == '\n') break; pChangeData[iSize] = cData; ++iSize; } } void CFileStream::Write(void * pData, int iSize) { if (!m_bOpen) return; fwrite(pData, iSize, 1, m_pFile); } void CFileStream::WriteLine(int iSize) { if (!m_bOpen) return; char* pBuffer = new char[iSize + 1]; *(pBuffer + iSize) = '\n'; fwrite(pData, iSize + 1, 1, m_pFile); delete[] pBuffer; }
'C,C++' 카테고리의 다른 글
C++ lower_bound, upper_bound (0) | 2018.12.26 |
---|---|
콜라한캔 :: 16진수 문자열로 변환 (0) | 2018.12.23 |
new, delete (0) | 2018.12.09 |
Reference (0) | 2018.12.09 |
inline (0) | 2018.12.09 |