조무위키
조무위키
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보
행위
문서
토론
편집
역사 보기
C언어
편집하기 (부분)
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
===포인터 연산=== ---- 디시위키 오랜만에 와서 문서 추가하니까 왜이러냐;; 원래 문서도 미리보기하면 오류나냐ㅋㅋㅋㅋㅋ 포인터는 아무 생각없이 일반 증감,가감 연산자를 쓸 경우 생각했던거와 다른 결과를 도출할 수 있는데, 여기서는 간단히 설명하겠다 포인터에 관련된 연산자는 아까 본듯이 <nowiki>*</nowiki> 와 & 가 있었고 ++나 --같은 연산자를 사용할 수 있는데 의미가 다르다. 간단하게 생각하자면 포인터 변수는 주소를 저장하는데 더하거나 뺄경우 주소의 증감 및 가감이 일어난다. 아까의 예제를 다시보자. int var = 0; int <nowiki>*</nowiki> ptr = &var; 이경우 var의 주소를 알기쉽게 0x00000000 이라고 할때 ptr이라는 포인터 변수로 var에 접근하여 값을 1 올리고싶다. 이 경우 (<nowiki>*</nowiki>ptr)++; 를 적으면 <nowiki>*</nowiki>연산자로 ptr이 가진 주소에 접근하여 ++연산자로 1 증감한다 ptr은 var의 주소를 가지고 있었으므로 var의 값은 최종적으로 1이 된다. 근데 엥? ptr++; 로 적어도 되는 각 아니냐? 해서 적었을경우 '''ptr은 값을 가지고 있는게 아니라 주소를 가지고 있기에 주소가 4 증가한다.''' '''4 증가하는 이유는 포인터 변수의 자료형 바이트 크기에 영향을 받기 때문이다 ( int형은 4바이트 ) ''' '''왜 4바이트냐 하면 배열같은 동일 자료형일 경우 다음 원소로 쉽게 접근하기 위해라고 생각하는데 글쎄 나도 진짜는 아몰랑 아는 사람있으면 적어줘''' ㄴ맞다. 포인터가 단순한 주소값 그 이상의 의미를 갖게 되는 핵심 개념이다. ㄴ메모리 주소 자체가 4바이트(32비트)이며 이는 시스템에 따라 달라짐 가감도 이와같이 1을 뺄경우 4씩 내려가는데 n을 더하거나 뺀다고 하면 n<nowiki>*</nowiki>sizeof(int) 이런식으로 깎인다고 생각하면 된다. (int형이 아닐경우 자료형의 크기를 맞게 고쳐주고 곱하면 맞다) 근데 포인터 변수에 <nowiki>*</nowiki> 나 <nowiki> / </nowiki>를 적진 마라 C2296오류 난다 배열을 설명할때 <nowiki>arr[0]</nowiki> 이런식으로 대괄호 안에 숫자를 넣어 해당 원소에 접근했었는데 배열의 이름이 시작주소라는 점을 이용해 포인터를 이용해 각 원소에 접근 할 수 있다. int arr[10]; for(int i=0;i<10;i++) { arr[i] = i; } 가 아닌 int arr[10]; for(int i=0;i<10;i++) { *(arr+i) = i; } 이 가능하단 소리 ㅎㅎ
요약:
조무위키에서의 모든 기여는 CC BY-SA 4.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
조무위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)