首页 > 解决方案 > 指针 (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-
的地址是:0x7ffd36e62cd8

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

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

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

标签: cpointers

解决方案


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

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

(请参阅此问题以了解为什么要转换为void*)。

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


推荐阅读