微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

指针 (x2) 的地址是什么?

如何解决指针 (x2) 的地址是什么?

让我们看下面的例子,我们交换 a 和 b 的值。

void swap(int* a,int* b) {
    // remember,a and be are both memory addresses Now!
    printf("The address of a is: %p\n",a);
    printf("The address of address-of a is: %p\n",&a);
    int tmp = *a;
    *a=*b;
    *b=tmp;
}

打印输出给了我:

a的地址为:0x7ffd36e62d08
address-of a的地址为:0x7ffd36e62cd8

第二个 printf 语句究竟告诉我们什么?例如:

int a = 4;
&a; // address-of a
int* b; = &a;
b; // address-of a
*b; // value-of a
&b; // address-of ...?

这只是内存地址在堆栈上的位置吗?

解决方法

为了进一步扩展 Deduplicator 的回答,我将您的 printf 更改为:

printf("The _value_ of a is: %p\n",(void*)a);
printf("The address of a is: %p\n",(void*)&a);

(请参阅 this question 了解为什么您应该投射到 void*)。

a 是一个指针,和其他任何东西一样具有值,例如 intdouble。唯一的“区别”是,a 的值是一个地址。 C 中的所有内容都是按值传递的,因此当您将指针 a 传递给此函数时,会在函数中创建其值的本地副本。指针值是指向 int 的地址。

,

这只是内存地址在堆栈上的位置吗?

没错。

,

代码应该是:

printf("The address a is: %p\n",a);
printf("The address of a is: %p\n",&a);

a 是一个完全普通的对象,它的类型是指向 int 的指针

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。