2013-07-24 3 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)); 
} 

Я хотел бы вернуться к значению, хранящемуся в указателе p (i.e., 10), с помощью e1. можно ли это проследить? Этот код был изменен случайно, я не уверен, что это сработает. если он работает, пожалуйста, покажите мне, как я могу вернуться к значению в 'p', используя 'e1'.как отследить этот стек и указатель

+0

попытка увидеть '' sp' и push', используя разборку. Вы можете использовать контрольные точки для отслеживания каждой переменной – Ishmeet

+0

, вы используете идеал для этого? –

+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), почему? –

Смежные вопросы