문제

포인터는 자신이 가리키는 값의 주소를 저장한다는 것을 알고 있지만 포인터의 값을 화면에 직접 표시하면 16진수 숫자를 얻게 됩니다.숫자가 포인터가 저장하는 것과 정확히 일치하면 다음과 같이 말할 수 있습니다.

pA = pB; //both are pointers

주소를 복사하고 있습니다.그렇다면 다음과 같은 매우 작은 항목을 작업할 때 포인터를 사용하면 더 큰 오버헤드가 발생하지 않을까요? int모래 bool에스?

도움이 되었습니까?

해결책

포인터는 본질적으로 숫자입니다. 데이터가있는 곳에 주소를 RAM에 저장합니다. 포인터 자체는 꽤 작습니다 (아마도 int 32 비트 아키텍처에서 long 64 비트).

당신은 맞지 만 맞습니다 int * 작업 할 때 공간을 절약하지 못할 것입니다 int에스. 그러나 그것은 요점이 아닙니다 (말장난 의도는 없음). 포인터가 있으므로 가질 수 있습니다 참조 단지 사용하는 것이 아니라 사물에 것들 그들 자신.

다른 팁

메모리 주소.

그것이 다른 것들이있는 기억의 위치입니다 ~이다.

포인터는 일반적으로 프로세서의 단어 크기이므로 일반적으로 단일 명령 주기로 이동할 수 있습니다. 요컨대, 그들은 빠릅니다.

다른 사람들이 말했듯이, 포인터는 "숫자"인 메모리 주소를 저장하지만 추상화입니다. 프로세서 아키텍처에 따라 포인터를 대상으로 추가 해야하는 기본 및 오프셋과 같은 숫자가 둘 이상일 수 있습니다. 이 경우 주소가 단일 숫자 인 경우 오버 헤드가 약간 높습니다.

예, 프로세서가 변수를 레지스터에 넣을 수있는 포인터 대 직접적으로 int 또는 bool에 액세스하는 데 오버 헤드가 있습니다. 포인터는 일반적으로 간접의 값이 오버 헤드를 능가하는 경우, 즉 배열을 가로 지르는 경우에 사용됩니다.

나는 시간 간접비를 언급하고 있습니다. OP가 더 우려되는 공간이나 시간 간접비인지 확실하지 않습니다.

숫자는 메모리의 주소를 나타냅니다. 포인터의 크기는 일반적으로 컴퓨터 아키텍처의 기본 크기이므로 다른 원시 유형에 비해 추가 오버 헤드가 없습니다.

일부 아키텍처에는 아키텍처가 단어 (32- 또는 64 비트 값) 만 지원하기 때문에 문자에 대한 추가 오버 헤드가 있습니다. 따라서 캐릭터에 대한 포인터는 그 단어 내에서 단어 주소와 캐릭터의 오프셋으로 저장됩니다. 포인터를 중심으로하는 것은 단어를 가져오고 캐릭터를 추출하기 위해 가치를 바꾸고 마스킹하는 것이 포함됩니다.

메모리 주소. 어딘가를 가리 킵니다! :-)

기본부터 시작하겠습니다.우선, 변수가 무엇인지, 어떻게 사용되는지 알아야 합니다.

변수 기본적으로 메모리 위치(보통 일부 값 포함)이며 일부 식별자(예: 변수 이름)를 사용하여 해당 메모리 위치를 참조하고 해당 위치에 있는 값을 사용합니다.

더 잘 이해하기 위해 현재 변수와 관련된 특정 위치에 있는 메모리 셀의 정보를 원한다고 가정해 보겠습니다.식별자를 사용하여 근처 셀에서 정보를 추출할 수 있나요?아니요.식별자(변수 이름)는 해당 특정 셀에 포함된 값만 제공하기 때문입니다.

그러나 어떻게든 이 변수가 존재하는 메모리 주소를 얻을 수 있다면 가까운 위치로 쉽게 이동하고 해당 정보도 런타임에 사용할 수 있습니다.

포인터가 작동하는 곳입니다.필요할 때마다 추가 주소 정보를 사용할 수 있도록 해당 변수의 위치를 ​​저장하는 데 사용됩니다.

통사론: 변수의 주소를 저장하려면 다음을 사용하면 됩니다. &(주소) 연산자.

foo = &bar 

여기서 foo는 변수 bar의 주소를 저장합니다.

이제 해당 주소에 존재하는 값을 알고 싶다면 어떻게 해야 할까요?

이를 위해 우리는 간단히 다음을 사용할 수 있습니다. *(역참조) 연산자.

value = *foo

이제 변수의 주소를 저장해야 하므로 변수의 경우와 동일한 방식으로 메모리가 필요합니다.이는 포인터도 다른 변수와 동일한 방식으로 메모리에 저장된다는 의미입니다. 따라서 변수의 경우와 마찬가지로 포인터의 주소를 또 다른 포인터에 저장할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top