변수는 알고리즘의 의도로가는 논리적 구성이고, 메모리 위치는 컴퓨터의 작동을 설명하는 물리적 구성입니다. 일반적으로 프로그램을 실행하기 위해 변수의 논리적 개념과 컴퓨터의 저장소 사이에 (컴파일러 생성) 매핑이 있습니다.
(어셈블리 언어에서도 알고리즘과 의도에 이르는 (논리적) 변수와 (물리적) 메모리 위치에 대한 개념이 있지만 어셈블리에서는 더 복잡합니다.)
변수는 높은 수준의 개념입니다. 변수는 알 수 없음 (수학 또는 프로그래밍 할당에서와 같이) 또는 값으로 대체 할 수있는 자리 표시 자 (프로그래밍 : 매개 변수에서와 같이)를 나타냅니다.
메모리 위치는 저수준 개념입니다. 메모리 위치는 때때로 변수의 값을 저장하기 위해 값을 저장하는 데 사용될 수 있습니다. 그러나 CPU 레지스터는 일부 변수의 값을 저장하는 또 다른 방법입니다. CPU 레지스터도 낮은 수준의 저장 위치이지만 주소가없고 이름 만 있으므로 메모리 위치가 아닙니다.
어떤 의미에서, 변수는 프로그램의 의도를 표현하기위한 추상화 메커니즘이며, 메모리 위치는 저장 및 검색을 제공하는 처리 환경의 물리적 개체입니다.
질문 003 : 포인터가 메모리 위치 0x23452 안에 저장되어있는 것이 사실입니까? 왜?
우리는 확실하게 말할 수 없습니다. 주소로 작동하는 값이 있다고해서 해당 주소임을 의미하는 것은 아니며 정수 (10 진수) 144466 일 수 있습니다. 우리는 단순히 수치 적으로 어떻게 보이는지에 기초하여 가치의 해석에 대한 가정을 할 수 없습니다.
질문 004 : 포인터가 메모리 위치 0x23452 안에 저장되어있는 것이 사실입니까? 왜?
이것은 실제로 이상한 질문입니다. 그들은 상자를 기반으로 몇 가지 가정을 예상하지만 각 상자마다 주소가 1 씩 증가한다는 점에 유의하십시오. 현대 컴퓨터에서, 그것은 각 박스가 바이트를 보유 할 수 있음을 의미 할 것입니다. 그러나 바이트는 8 비트에 불과하며 0에서 255 사이의 범위 (서명되지 않은 값의 경우) 일 수 있습니다. 그러나 그들은이 주소들 중 하나에 저장된 훨씬 더 큰 값을 보여 매우 의심 스럽다. (이것이 단어로 주소 지정된 기계라면 가능할 수 있지만, 그렇게 말하지는 않으며 오늘날 일부 기계는 있지만 일부 기계는 그렇지 않습니다.)
모두 보여 드린 네 개의 플래시 카드를 기반으로 포인터를 약간 다르게 정의합니다.
포인터는 값이 다른 메모리 위치의 메모리 주소 인 메모리 위치입니다.
이 생각이 맞는 상황이 있지만 여기서 은유를 섞고 있습니다. 변수의 개념은 알고리즘과 의도로갑니다. 모든 변수에 메모리 위치가 있다고 가정 할 필요는 없습니다. 메모리 위치는 주소 지정을 지원하기 때문에 일부 변수 (특히 배열)에는 메모리 위치가 있습니다 (CPU 레지스터는 이름을 지정할 수 없음).
실행을 위해 변수 및 명령문과 프로세서 메모리 위치 및 프로세서 명령어 시퀀스간에 논리적 매핑이 있습니다. 값이 변하지 않는 변수 (예 : 상수)는 메모리 위치가 필요하지 않습니다. 값은 마음대로 재생산 할 수 있기 때문입니다 (예 : 컴파일러에서 생성 한 코드 시퀀스에 필요).
a
,0x23453
.nil
그 안에있는 것들이 가치입니다. 그것은 당신에게 명백해 보일지 모르지만, 나는 그 필드가 어떻게 정의되어 있는지 보지 않고 그 질문에 결정적인 대답을하는 것이 편안하지 않을 것입니다.a
두 번째 이미지에서 문자, 문자열 (다른 경우) 또는 변수 이름 인지 알 수 있는 방법이 없습니다 . 문자열이면nil
문자열입니까? 아니면 "널"값?