同一指针如何在c中得到不同的值?

时间:2014-05-30 19:10:09

标签: c

我写这段代码:

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

int main() {
    int tst;
    tst = 23;
    char buf[0];
    int * k = &tst;
    printf("%p.. %d\n", k, *k);
    sprintf(buf, "%p", &tst);
    intptr_t x = buf;
    int* y = x;
    printf("%p...%d", y, *y);
    return 0;
}

及其输出:

0028FF34.. 23
0028FF34...942813232

所以用同样的指针我有不同的价值! 为了获得相同的价值我必须做些什么?

编辑:我更改了代码:

int main() {
int tst;
tst = 23;
char buf[4];
int * k = &tst;
printf("%p.. %d\n", k, *k);
sprintf(buf, "%p", &tst);
void* i;
sscanf(buf,"%p",&i);

int* o = i;
printf("i: %p %d\n",i, *o);
intptr_t x = buf;
int* y = x;
printf("%p...%d\n", y, *y);
return 0;
}

它工作here但在我的电脑中它有问题!

2 个答案:

答案 0 :(得分:0)

K通过打印K包含tst int * k = &tst;的地址,您是tst的打印机地址。并且通过解除引用K,您打印的是tst的值,因为K包含tst的地址。

答案 1 :(得分:-1)

我这样解决了这个问题:

int main() {
int tst;
tst = 23;
char* buf=malloc(sizeof(void*)); //here!!! :D
int * k = &tst;
printf("%p.. %d\n", k, *k);
sprintf(buf, "%p", &tst);
void* i;
sscanf(buf,"%p",&i);

int* o = i;
printf("i: %p %d\n",i, *o);
intptr_t x = buf;
int* y = x;
printf("%p...%d\n", y, *y);
return 0;
}