2013-07-24 2 views
0
#include<stdio.h> 
#include<stdlib.h> 
struct test 
{ 
    int *p; 
}; 
typedef struct test * TESTP; 
struct ex 
{ 
TESTP *testpp; 
}; 
typedef struct ex * EXP; 
void main(void) 
{ 
    int x=10; 
    struct test t2; 
    TESTP t1=(struct test *)malloc(sizeof(struct test)); 
    EXP e1=(EXP)malloc(sizeof(struct ex)); 
    (e1->testpp)=&t1; 
    t1->p=&x; 
    printf("%d\n",**(e1->testpp)); 
} 

e1을 사용하여 포인터 p (즉, 10)에 저장된 값을 추적하고 싶습니다. 저것을 추적하는 것이 가능한가? 이 코드는 우연히 편집되었으므로이 코드가 제대로 작동하는지 확신 할 수 없습니다. 그것이 작동한다면 'e1'을 사용하여 'p'에서 어떻게 값을 추적 할 수 있는지 보여주십시오.이 스택과 포인터를 추적하는 방법

+0

시도가'sp'와'push'을 볼 수 : 당신이 그렇게 할 방법은 다음과

이다. 각 변수를 추적하기 위해 중단 점을 사용할 수 있습니다 – Ishmeet

+0

ide를 사용하고 있습니까? –

+0

@boxed__l : 아니요, GCC 컴파일러를 사용하고 있습니다. –

답변

2

e1부터 시작하여 p으로 시작하는 체인을 역 참조 할 수 있기를 원합니다. 분해를 사용하여,

printf("%d\n",*((*(e1->testpp))->p)); 
+0

감사합니다. 나는 의심이 하나 더있다. x = 10, & x = 2686748; t1 → p = 2686748, & (t1 → p) = 9834160; t1 = 9834160, & t1 = 2686740; e1-> testpp = 2686740, & (e1-> testpp) = 9834192; e1 = 9834192, & e1 = 2686736; 그래서 내가 인쇄 할 경우 *** (e1-> testpp) 나는 10을 가져야 만하지만 오류가 발생합니다. 이게 뭐니? 또한 (x, t1, e1)과 (p, testpp)의 주소에는 큰 차이가 있습니다. 이유는 무엇입니까? –

관련 문제