为何打印变量地址而非值?能否通过地址访问打印变量值?
问题解答
你的代码只是把num的地址赋值给了int类型的变量address,直接打印address当然会输出地址本身。要通过地址访问变量的值,核心是用指针解引用运算符*——这和scanf的逻辑类似:scanf用地址是为了往对应内存写值,而要读地址对应的值,就得用*来“解引用”这个地址。
下面是两种正确的写法:
方式1:直接对地址解引用
int num = 2029; printf("\n%d", *&num);
这里&num是num的内存地址,*运算符会访问该地址指向的内存,取出里面存储的2029。
方式2:用指针变量存储地址后解引用
注意别再用int存地址了,应该用对应类型的指针(比如int*),否则在64位系统中可能因为地址长度和int不匹配导致截断问题:
int num = 2029; int *address = # // 用int*类型存储int变量的地址 printf("\n%d", *address); // 解引用指针,获取变量的值
简单说,只要拿到变量的地址,通过*地址的形式就能访问到地址对应的变量值,完全可以像scanf那样不用变量名直接操作。
内容的提问来源于stack exchange,提问作者big_0
相关产品推荐
相关产品推荐

