我写这段代码:

#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;
}


它可以正常运行,但是在我的计算机上有问题!

最佳答案

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

关于c - 相同的指针如何在c中获得不同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23961835/

10-16 04:53