C의 값에 대한 주소 또는 포인터 인쇄


80

나는 상당히 단순 해 보이는 것을하고 싶다. 나는 결과를 얻었지만 문제는 결과가 올바른지 알 방법이 없다는 것입니다.

저는 C로 작업하고 있으며 두 개의 포인터가 있습니다. 포인터의 내용을 인쇄하고 싶습니다. 포인터가 가리키는 값을 얻기 위해 포인터를 역 참조하고 싶지 않고 포인터가 저장 한 주소 만 원합니다.

나는 다음 코드를 작성했고 내가 알아야 할 것은 그것이 옳은지, 그렇지 않다면 어떻게 수정할 수 있는가이다.

내가 이것을 게시하는 동안 (그리고 그것이 정확하다는 것이 중요한 이유) 결국 포인터에 대한 포인터를 위해 이것을해야하기 때문입니다. 그건:


작성한 내용이 정확하고 정확히 어떤 문제가 발생합니까?
Luca Matteis

내가 설명했듯이 나는 결과를 얻었지만 결과가 올바른지 또는 그것이 나에게 쓰레기를 주는지 알 방법이 없었습니다. Don과 아래의 다른 사람들 (귀하 자신)은 이러한 결과가 유효 함을 확인했습니다.
Frank V

답변:


29

당신이 가진 것이 맞습니다. 물론 emp1과 item1의 포인터 값이 동일하다는 것을 알 수 있습니다.


1
컴파일러가 item1의 유형을 구성하는 각 클래스를 배치하는 방법에 따라 item1의 유형이 다중 상속의 일부이거나 Emp의 조상 인 경우에는 동일하지 않습니다.
Jim Buck

2
@Jim : "C"태그는 그렇지 않다는 것을 암시합니다
Hasturkun 2009-06-28

1
@Jim : Hasturkun이 맞습니다. 나는 C에서 일하고있다. 나는 그것을 게시 했어야했다.
Frank V

39

포인터에 대한 포인터의 주소를 인쇄하려면 :

한 번 역 참조하고 두 번째 주소를 인쇄하려면 :

디버거를 사용하여 항상 확인할 수 있습니다. 리눅스를 사용 ddd하고 메모리를 표시하거나 그냥 일반인 gdb경우 메모리 주소를 볼 수 있으므로 포인터의 값과 비교할 수 있습니다.


16

나는 이것이 가장 정확할 것이라고 믿습니다.

printf()가변 함수이며 올바른 유형의 인수를 전달해야합니다. 이 표준은 말한다 %p합니다 void *.


나는 그들이 승진한다고 상상할 수 있습니까? 확실하지 않습니다. 누군가 명확히 할 수 있습니까?
RastaJedi

4
일부 조사 후에는 자동으로 승격되지 않습니다. 캐스트 void *가 실제로 필요합니다.
RastaJedi

10

기본 포인터 주소 표시를 이미 해결 한 것 같으므로 이중 포인터의 주소를 확인하는 방법은 다음과 같습니다.

다음 a을 수행 하여 이중 포인터의 주소에 액세스 할 수 있습니다 .


printf("which contains this value: %c\n" **a);^. ^을 추가하고 싶었습니다.
RastaJedi

4

결과:

ptr : 0xbfb4027f, 값 : A 및 주소 : 3216245375


0

나는 특히 새로운 하드웨어와 함께이 위치에 있었다. 나는 당신 자신의 작은 16 진 덤프 루틴을 작성하는 것이 좋습니다. 데이터와 그들이있는 주소를 모두 함께 볼 수 있습니다. 그것은 좋은 습관이며 자신감을 키워줍니다.


3
무지하게 들리는 대가로 그런 루틴을 작성하는 방법에 대해 자세히 설명해 주시겠습니까?
Faisal Vali

1
또한이 답변이 의견으로 더 적합 할 수 있습니까?
RastaJedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.