본문 바로가기

2015/09

C언어 포인터 - 문자열을 다룰 때 이중 포인터를 쓰는 이유 1.char * word = "hello" 이렇게되있을때, char * word = 0x12 이런식으로, 문자열의 주소값을 가지고있다고 생각해서 제가 이름값만 바로 넘겨버렸었거든요; 문자열의 주소값을 바탕으로 포인터로 접근하면 된다고생각했는데 안되더라구요 ㅠㅠ. 왜그런건가요 ㅠㅠ.? 왜, 문자열의 주소값이 아니라, 문자열을 가리키고있는 포인터의 주소를 이중포인터로 받아서 접근해야하는건가요?? 2.배열의 경우엔 이름이 주소값이라서 저렇게 넘겨졌구요; 제가 개념이 꼬인거같은데 이부분 조금만 설명해주시면안될까요 ..? c언어에서 문자열을 표현할때, 포인터로 표현할때와 배열의 표현할때 차이점을요 ㅠㅠ. 테스트를 위하여, 문자열 연산을 싱글 포인터로 바꿔봤습니다. #include #include #include .. 더보기
c언어 메모리동적할당 문제 Memory Allocation Malloc 출력값 알아내는게 문제인데요 출력값 첫번째는 30이고 두번째는 a부터 i까지 출력돼야 되는거 아닌가요? 두번째는 쓰레기값도 아니고 뭔 이상한 한자같은게 나오는데 원래 이렇게 나오는게 맞나요? Debug : For 문에 불필요한 세미 콜론이 있어서 오류입니다. ○ 질문하신 코드의 For Loop에 잘못된 세미 콜론이 있습니다. 이 때문에 For 문이 진행이 안되었습니다. 코드 개선 ○ 물론, 예제 코드라서 그랬겠지만, 코드에 잘못된 부분이 많습니다. ○ Malloc() 을 쓸 때는 Sizeof() 와 함께 써야 시스템이 바뀌어도 오류없이 동작합니다. 원래 코드는 위험합니다. ○ Malloc() 후에는 메모리를 리셋해 주는 것이 좋습니다. (이 부분은 생략) ○ 문자열을 다룰 때는 마지막에 Null 문자를 .. 더보기
Const (한정자) 관련 질문입니다. #include using namespace std; class CObj { private: const int m_iValue; const short m_sValue; int m_iTest; public: int* GetTest(void) const //1번 함수 { return &m_iTest; } int* const GetTest2(void) { return &m_iTest; // 2번 함수 } }; int main(void) { return 0; } 1번 함수는 왜 오류가 나는 건가요?? 그리고 nt* const GetTest(void) 이렇게도 되는데 이건 무슨 의미 인가요??? Const 선언의 위치는 알아보기 쉽게 맨 앞으로 해주세요 1. int* GetTest(void) const 이게 별로.. 더보기
두 정수의 최대공약수 구하기 - 디버깅 두 정수의 최대공약수를 구하는 코드입니다.뭐가 문제인지 잘 모르겠습니다.왜 고쳐야 하는지하고 어떻게 고쳐야 하는지 알려주시면 감사하겠습니다. 코드의 세세한 실수가 많네요 ○ Scanf() 함수의 입력 포멧 ("%d%d") 사이에 여백이 있어야 합니다. 이대로는 3, 36, 3 6 을 구분할 수 없습니다. ○ 두 숫자가 같은 것을 확인하는 부분은 (a == b) 입니다. 여기가 (a = b) 로 되니, 이 부분만 지나면 a, b 값이 똑같아 지고, 이후 부분은 건너뛰게 됩니다. ○ 출력 부분에 "%d" 가 없으니, c 를 출력할 수가 없습니다 .Printf() 함수 사용법을 더 명확하게 보세요 ○ 최대공약수를 못찾는 경우에 대한 예외처리 추가해주세요 코드 예제 #include int main() { int.. 더보기