목록공부/개인 (12)
응애맘마조
참조자(&)는 포인터와 연관되어 있습니다. 이번에는 포인터와는 관계없이 참조자 자체로만 알아보겠습니다. 먼저 코드부터 보겠습니다. num1 변수에 10을 저장했지만 num2에 참조자(&)가 붙었습니다. 변수의 주소 값을 반환하는 연산자로써의 사용과는 다르게 새로 선언되는 변수에 붙으면 참조자의 선언을 의미하게 됩니다. 그래서 num1과 num2에 10이 저장이 되지만 num2에 참조자로써 접근하여 20이라는 값을 저장했기 때문에 num1과 num2에 20이라는 값이 저장이 되었습니다. 이렇게 참조자는 자신이 참조하는 변수를 대신할 수 있는 다른 이름입니다. 참조자는 별칭 같은 것으로 변수에 별명이나 별칭을 붙여줍니다. 밑의 코드를 보겠습니다. 변수에 저장된 값 하나에 대해서 여러 개의 참조자가 선언됐지만..
포인터는 메모리의 주소 값을 저장하기 위한 변수입니다. 즉, 메모리 공간을 참조하는 기준이 됩니다. 위의 사진에서 num은 0x00000007, c1은 0x00000041, c2는 0x00000042라는 것을 알 수 있습니다. (사용자의 컴퓨터 및 사양 및 환경에 따라 주소값은 달라질 수 있습니다.) 이처럼 자료형의 크기에 따라 할당되는 크기가 달라집니다. char은 1바이트이기 때문에 41, 42로 나오지만 int는 4바이트이기 때문에 표기는 0x00000007이지만 정확히는 0x0000007부터 0x00000010까지에 걸쳐서 할당이 되어있습니다. 포인터의 선언 방법에 대해 알아보겠습니다. 연산문 구성은 다음과 같습니다. 먼저 num 변수에 7을 저장하고 포인터 변수 ptr을 선언해서 num의 주소 ..
상수는 이름이 있는 상수와 이름이 없는 상수로 나눌 수 있고 int, double 같은 자료형으로 표현이 됩니다. 위의 코드는 덧셈을 하는 코드입니다. 먼저 정수 1과 2가 상수의 형태로 메모리에 저장이 됩니다. 1 + 2 덧셈이 됩니다. 계산의 결과로 얻어진 3이 num 변수에 저장이 되고 출력이 됩니다. 위처럼 1과 2에는 할당된 메모리 공간에 이름이 없습니다. 이렇게 이름 없는 상수를 가리켜 리터럴(Literal) 상수나 리터럴이라고 합니다. 위의 코드에서 변수는 num1, num2, num3, num4 해서 총 4개이고, 상수는 정수형 1, 2, 7이고 실수형, 3.0f, 5.5 해서 2개입니다. 다음은 이름을 지니는 심볼릭 상수로서 const 상수입니다. 변수 선언시 자료형 앞에 쓰면 됩니다. ..
C++에서 auto는 컴파일러가 선언된 변수의 형식을 추론하도록 지시합니다. auto 키워드를 사용하면 초기값에 맞춰서 변수형이 자동으로 결정됩니다. 자동으로 int형으로 변환하여 덧셈을 한 것을 확인할 수 있습니다. 콘솔 창으로도 정상적으로 3이 출력된 것을 확인할 수 있습니다. 하지만 auto는 반드시 초기화를 해야 됩니다. 초기화를 하지 않았을 경우 해당 오류 내용이 출력되면서 실행이 되지 않습니다. 또한 변수형이 다르더라도 컴파일할 때 자동으로 맞추는 것을 확인할 수 있습니다. auto는 자동으로 변수형을 바꿔주기 때문에 편리성이 있지만 원하지 않는 변환형이 될 수도 있기 때문에 의도하지 않은 오류가 발생할 수 있습니다. 그렇기 때문에 atuo는 너무 무분별하게 사용하지 않는 것이 좋습니다. 읽어..
함수의 호출하는 방법에 대해 알아보겠습니다. Call by value는 값을 인자로 전달하는 함수의 호출방식입니다. int temp 변수를 추가해서 임시로 저장하는 공간을 만들고 바꾸는 방식입니다. 그렇게 해서 실행하면 됩니다. 하지만 결과는 달라지지 않았습니다. 그 이유는 Swap 함수 안에 있는 num1, num2와 main 함수 안에 있는 num1, num2가 각각 지역변수라서 가지고 있는 주소값이 달라지지 않았기 때문에 Swap 함수를 호출해도 값이 변하지 않습니다. 그래서 사용하는 방법이 Call by reference입니다. Call by reference는 주소 값을 인자로 전달하는 함수의 호출방식입니다. *을 붙여 주소값으로 넘기는 방식입니다. 정상적으로 바뀐 값을 볼 수 있습니다. 사실 ..