본문 바로가기

C,C++

void 포인터

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