我试图了解如何正确创建别名。
我要定义
两个表达式具有相同的别名 与他们相关联的位置。
下面是显示内存分配的方框图图像
目标是为a[1]
创建一个别名
方框的边缘是指位置,内部的圆圈是指存储的值。
我认识到b[1]
的值是a[1]
的地址。所以
我思考为了创建别名,我要做的就是创建一些变量并将其值分配为b[1]
。
要测试我的假设是否正确,我尝试了以下操作:
struct T *alias = *b[2];
printf("alias location is: %p\n",alias);
printf("a[2] location is: %p\n",a[2]);
哪个会产生:
alias location is: 0x561936c62320
a[2] location is: 0x561936c62320
地址匹配,但是如果我做对的话我会感到困惑。我不需要在&
函数中使用printf()
运算符来打印实际地址吗?当我这样做时:
struct T *alias = *b[2];
printf("alias location is: %p\n",&alias);
printf("a[2] location is: %p\n",&a[2]);
我得到的地址不正确:
alias location is: 0x7ffdee2cd320
a[2] location is: 0x7ffdee2cd340
有人可以解释一下我是否做得正确,如果做错了吗?