如何通过RAM上的索引设置变量值?

时间:2012-03-07 16:16:33

标签: c pointers memory-management

我收到一个指针数值,如:0xbfe0e6ac例如,可以将int foo设置为内存中另一个int的0xbfe0e6ac值吗?

我的情景:

我试图实现从数组传递下一个索引的函数传递指针值(如上例所示)作为参数。

例如:

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()保存数组的指针,将参数传递给数组和每次调用,检查以前是否使用了作为参数传递的数组并获取它的信息,喜欢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];
        }
    }

1 个答案:

答案 0 :(得分:3)

是的,做这样的事情:

int *fooPtr = 0xbfe0e6ac;

foo = *fooPtr;

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

foo = *(int *) 0xbfe0e6ac;