是否可以不使用任何数组将整数值分配给指定地址?

问题描述 投票:0回答:2

我最近在阅读有关C语言中的指针的信息,但停留在某个地方。我需要提供一个例子来使这个问题更加清楚。

我已经声明了两个整数变量a和b,并为其分配了值55和88。现在,通过使用&符号,我可以访问其地址并声明指针,如下所示:

#include <stdio.h>

int main(void)
{
    int a = 55;
    int b = 88;

    int *pa = &a;
    int *pb = &b;

    printf("Address of 'a' is: %p\n", &a);
    printf("Address of 'b' is: %p\n", &b);

    printf("Desired new address for the value of 'b' is: %p\n", (pa+1));

    //What to do here to assign the value of b into the address (pa+1) ?
}

我试图实现的目标(不使用任何数组)是:我希望将b的值分配给a旁边的地址。

我可以通过&a或* pa =&a获得a的地址,下一个地址为(pa + 1)。现在指针pa保存变量a的地址。因此,我猜(pa + 1)的值应该指向a的下一个可能地址的地址。

现在我的问题是拥有b的值和地址(pa + 1),我们如何将b的值注册/分配给地址(pa + 1)?

编辑:

以下操作无效:

int a = 55;
int b = 88;

int *pa = &a;
int *pb = &b;

printf("Address of 'a' is: %p\n", &a);
printf("Address of 'b' is: %p\n", &b);

printf("Desired new address for the value of 'b' is: %p\n", (pa+1));

*(pa + 1) = b;

printf("New address of 'b' is now: %p\n", &b);

输出:

enter image description here

c pointers assign
2个回答
1
投票

要将值写入地址,请使用*address = value;

例如,

*(pa + 1) = b;

但是,这样做很可能会覆盖某些本应用于其他用途的内存,并使程序崩溃。


0
投票

您有(pa+1),它是类型为int *的地址,因此您要做的就是取消引用它:

*(pa+1) = b;

但是请注意,C标准不允许您在写操作超出对象的内存范围,并且实际上会调用undefined behavior。此类代码仅在尝试执行攻击(例如缓冲区溢出)时才有用。

编辑:

您的问题表明您想将bvalue写入其他地址,但是示例代码表明您实际上要更改变量baddress,即完全是其他的东西。这是不可能的,因为变量的地址在生命周期中是固定的。


0
投票

b的值写入您要使用的地址:

*(pa + 1) = b

但是请记住,这会导致不确定的行为,因此您可能无法获得想要的东西,无法确定。

这样,您将写入值,但b的地址不会改变,这就是为什么在打印中看不到任何差异。

© www.soinside.com 2019 - 2024. All rights reserved.