본문 바로가기

C언어

(4)
[홍정모의 따라하며 배우는 C언어] 포인터형 매개변수 함수의 매개변수는 값을 복사해서 사용하는 것이다 그렇기 때문에 함수 내부에서 값을 바꿔도 변하지 않으며, 주소값을 찍어봐도 당연히 호출한 부분의 주소값과는 다르다. 이것을 call by value 라고도 한다. 매개변수에 주소값 즉 포인터 변수를 넣게되면 주소값이 가리키는 값이 바뀌게 된다. 이것은 값을 복사해서 사용하는 것이 아니라 직접 주소값을 바꾸는 것이므로 메모리 비용이 덜 들어간다. 이것을 call by pointer 라고 한다.
[홍정모의 따라하며 배우는 C언어] 포인터 변수의 크기 포인터의 크기는 고정되어있다 왜 이런 결과가 나오는가? 동네가 크던 작던 우편번호 크기는 동일하다 포인터의 크기는 일반적으로 cpu에 따라 결정되며, 32비트 CPU에서는 4바이트 64비트 CPU에서는 8바이트 크기를 가진다. CPU의 1워드의 크기이며, 워드란 CPU가 한번에 처리할 수 있는 데이터의 크기이다. 64바이트의 경우 포인터의 크기는 8이 나오는 것을 확인할 수 있다
[홍정모의 따라하며 배우는 C언어] 포인터의 작동원리 * : 변수 앞에 쓰이며, 포인터 변수임을 의미한다. & : 변수에 대입하는 값을 주소값으로 변경할 때 사용한다. *는 간접접근(inderection), 역참조(dereferencing), 방향 재지정(redirection)이라고도 부른다 printf로 *a_ptr을 출력해보면, 주소값이 가르기는 값을 출력해준다
[홍정모의 따라하며 배우는 C언어] 문자열이 메모리에 저장되는 구조 문자열의 끝이 어딘지를 표현하기위해 메모리공간을 하나 더 사용한다 문자열 길이는 자동으로 +1이 된다 \0 뒤의 메모리는 무시해준다 printf로 확인해보면, \0 뒤의 문자는 보이지 않는다 \0는 널문자열 이라고 부른다 메모리에 저장될 때 해당 문자열의 끝이 어디인지 모르기때문에 널문자열이 필요한 것이다