首页 > 解决方案 > 是否可以不使用任何数组将整数的值分配给指定地址?

问题描述

我最近正在阅读 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);

输出:

在此处输入图像描述

解决了:

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

        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 value at pa+1 is now: %d\n", *(pa+1));

}

标签: cpointersassign

解决方案


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

例如,

*(pa + 1) = b;

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


您对问题的编辑表明您想要更改变量的地址。这是不可能的。如果可能的话,它会写成&b = pa + 1;.


推荐阅读