我写这段代码:
#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但在我的电脑中它有问题!
答案 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;
}