2012-03-07 67 views
0

我收到一个像这样的指针数值:0xbfe0e6ac它可能设置int foo例如值为0xbfe0e6ac这是内存中的另一个int值吗?如何通过您的索引在RAM上设置变量值?

我scenare:

我试图执行功能从阵列穿过指针的值(如上面的例子)作为参数得到下一个索引。

例如:

char * a = "baa"; 
char* b = "foo"; 

    printf("%c", cgetnext(&a)); // b 
    printf("%c", cgetnext(&a)); // a 
    printf("%c", cgetnext(&b)); // f 
    printf("%c", cgetnext(&b)); // a 

,我可以看到这样做的单一的方法是:在cgetnex()保存数组传递等参数成阵列,并且每个呼叫的指针,检查是否被用作paramater通过阵列之前,并获得它的信息,如lasindexused和指针值到RAM中。 这里是我的代码:

#include <string.h> 
#include <stdlib.h> 

typedef struct { int pLocation; int lastIndex; } POINTERINFORMATION; 

int  __myIndex; 
POINTERINFORMATION pointersLocations[256]; 
int  pointersLocationsLength; 
char * temparr = NULL; 


__myIndex = pointersLocationsLength = 0; 

int 
    plAdd (int p) 
    { 
     if (plLen >= sizeof(pointersLocation)) { 
      return -1; 
     } else { 
      pointersLocation[pointersLocationsLength].pLocation = p; 
      pointersLocation[pointersLocationsLength].lastindex = 0; 
      pointersLocationsLength ++; 
      return pointersLocationsLength; 
     } 
    } 

int 
    getPointer (int p, POINTERINFORMATION ** out) 
    { 
     int i; 
     for (i = 0; i < pointersLocationsLength; i++) 
     { 
      if(pointersLocation[pointersLocationsLength].pLocation == p) 
      { 
       *out = makevariablefromponiter(pi.pLocation); 
       return 1; 
      } 
     } 

     return 0; 
    } 

char 
    cgetnext(char * arr) 
    { 
     char * myarr; 
     const size_t size = sizeof(char *) + 1; 

     myarr = malloc(size); 

     if (NULL == arr){ 
      POINTERINFORMATION * pi; 
      if (getPointer(p, &pi)) 
      { 
       __myIndex = pi.lastindex; 
          myarr = makevariablefromponiter(pi.pLocation); 
      } 
     } else { 
      myarr = strdup (arr); 
     } 

     if (strlen(myarr) == __myIndex) { 
      return '\0'; 
     } else { 
      __myIndex ++; 
      temparr = malloc(size); 
      temparr = strdup(myarr); 
      return myarr[__myIndex - 1]; 
     } 
    } 

我希望这对你很清楚。任何帮助非常感谢。提前致谢。

回答

3

是,做这样的事情:

int *fooPtr = 0xbfe0e6ac; 

foo = *fooPtr; 

事实上,你可以把它更加简洁:

foo = *(int *) 0xbfe0e6ac; 
+0

流,非常感谢! :) – Jack 2012-03-07 16:54:38

+0

另一个问题:是一个'int'足以保存指针索引值或我应该使用'长'? – Jack 2012-03-07 17:11:44

+0

@Jack'int'应该足够大 – 2012-03-07 17:57:53