역 참조 포인터의 실제 메커니즘 (컴파일러가 실제로 수행하는 기능)에 관해서는 약간의 고민이 있습니다.포인터 역 참조 : 컴파일러의 실제 메커니즘
#include <iostream>
int main()
{
int a = 5;
int* ptr = &a;
int** pptr = &ptr;
int*** ppptr = &pptr;
int**** p4tr = &ppptr;
std::cout << "a = 5 \nint*ptr = &a \nint** pptr = *ptr\nint*** ppptr = &pptr\nint**** p4tr= &ppptr\n" << std::endl;
std::cout << "a: " << a << std::endl;
std::cout << "&a: " << &a << std::endl << std::endl;
std::cout << "ptr: " << ptr << std::endl;
std::cout << "*ptr: " << *ptr << std::endl;
std::cout << "&ptr: " << &ptr << std::endl << std::endl;
std::cout << "pptr: " << pptr << std::endl;
std::cout << "*ptr: " << *pptr << std::endl;
std::cout << "**pptr: "<< **pptr << std::endl;
std::cout << "&pptr: " << &pptr << std::endl << std::endl;
std::cout << "ppptr: " << ppptr << std::endl;
std::cout << "*ppptr: " << *ppptr << std::endl;
std::cout << "**pptr: " << **ppptr << std::endl;
std::cout << "***pptr: " << ***ppptr << std::endl;
std::cout<< "&pptr: " << &ppptr << std::endl << std::endl;
std::cout << "p4tr: " << p4tr<< std::endl;
std::cout << "*p4tr: " << *p4tr<< std::endl;
std::cout << "**p4tr: " << **p4tr<< std::endl;
std::cout << "***p4tr: " << ***p4tr<< std::endl;
std::cout << "****p4tr: " << ****p4tr<< std::endl;
std::cout << "&p4tr: " << &p4tr<< std::endl << std::endl;
return 0;
}
제공합니다 :-(
내가 여러 포인터와 간단한 프로그램을 작성 나는 구글을 통해 여기에 유래에에 많은 빨간색,하지만 난 아직은 그것을 얻을 coulnd't 나 내 컴퓨터에 : 내가 알아 낸 무엇a = 5
int*ptr = &a
int** pptr = *ptr
int*** ppptr = &pptr
int**** p4tr= &ppptr
a: 5
&a: 0x7fffe4db870c
ptr: 0x7fffe4db870c
*ptr: 5
&ptr: 0x7fffe4db8700
pptr: 0x7fffe4db8700
*ptr: 0x7fffe4db870c
**pptr: 5
&pptr: 0x7fffe4db86f8
ppptr: 0x7fffe4db86f8
*ppptr: 0x7fffe4db8700
**pptr: 0x7fffe4db870c
***pptr: 5
&pptr: 0x7fffe4db86f0
p4tr: 0x7fffe4db86f0
*p4tr: 0x7fffe4db86f8
**p4tr: 0x7fffe4db8700
***p4tr: 0x7fffe4db870c
****p4tr: 5
&p4tr: 0x7fffe4db86e8
, 어떻게 되 참조가 작동합니다 : INT * PTR = & A를하며 "변수"PTR 유형입니다 컴파일러를 알려줍니다 "int *"(interger에 대한 포인터; 즉 메모리 주소) 따라서 * ptr을 쓸 때 컴파일러는 ptr의 값을 받아 주소로 가져와 int 형식으로 저장된 주소를 해석합니다.
지금까지 그렇게 좋았습니다.
하지만 int ** pptr = & ptr은 실제로 컴파일러를 의미합니까? pptr이 "int **"유형인지 여부를 나타 냅니까? 또는 여전히 의미합니까 PPTR 유형의 "INT *"
두 번째 별표 실제로 컴파일러에 무엇을 의미합니까 왜 내가 수 없습니다 (내가 & A와, & PTR이 좋은 메모리 주소를 의미)입니다 쓰기 : "INT는 * PPTR = & PTR은" 이 이 당신의 노력 주셔서 너무 감사합니다 (적어도 g ++ 나에게 그렇게 못하게) 일이 나에게 unlogical 보일 경우, 그것은 :-), 내 머리 아파)
"내 머리가 아파요"- 걱정 마세요. 이것은 가장 숙련 된 C++ 전문가의 두뇌까지도 아프게합니다. [별표 3 개 프로그래머가 되려고하지 마십시오.] ( –
포인터는 단지 주소 일뿐입니다. 다른 사람의 주소를 가져 와서 종이에 적어 둘 수 있습니다. 그리고 나서 다른 쪽지에 종이를 남겨 놓은 부분을 적을 수 있습니다. –
@ H2CO3 "three-star-programmer"... 이것은 나의 날 (밤)을 만들었다! – hh4rsan