c - 是否可以不使用任何数组将整数的值分配给指定地址?
问题描述
我最近正在阅读 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));
}
解决方案
要将值写入地址,请使用*address = value;
.
例如,
*(pa + 1) = b;
但是,通过这样做,您很可能会覆盖一些本应用于其他用途的内存,并使您的程序崩溃。
您对问题的编辑表明您想要更改变量的地址。这是不可能的。如果可能的话,它会写成&b = pa + 1;
.
推荐阅读
- python-3.x - 在 Flask 中执行排序、过滤和分页等操作的简洁方式
- sqlite - 如何在 Pandas 数据框中读取多个 SQLite 表?
- r - 基于 cv.glmnet 中 type.measure 参数的不同结果
- javascript - 使用 axios 检索数据---得到 404 错误
- php - 如何在单击时获取复选框的值
- r - R - IMDb 数据集未加载
- r - 为什么 tidyverse 安装在 Ubuntu 上找不到包?
- php - 如何显示数据库中多行的表格
- r - 如何在多列上循环或应用具有 2 个条件的 ifelse 语句?
- doctrine - 如何从 DefaultController 中的教义数据库中获取所有数据,然后将该数据转发到 Symfony4 中的树枝模板