c - 指针 (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 ...?
那只是堆栈上内存地址的位置吗?
解决方案
为了进一步扩展 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
.
推荐阅读
- database - Cassandra写一致性级别ALL说明
- laravel - 在 Laravel Bade View 的父菜单和子菜单上设置类
- angular - 如何在 ng-bootstrap 弹出窗口中添加关闭“X”
- unit-testing - EasyMock 失败的测试用例“参数匹配器的使用无效!预期 2 个匹配器,1 个记录”错误
- deep-learning - Pytorch扩展不可训练?
- mysql - 加入四张桌子
- elixir - 显示来自 %Mariaex{} 地图的结果
- json - 使用带有包含某些字符串的键的 jq 选择元素,键保留在结果中
- javascript - 在节点 js 中将 360 度视图转换为 equirectangular?
- python - 找不到 Django url 页面