c - 为什么变量地址不变-c编程
问题描述
我在 for 循环的每次迭代中声明一个变量x
。为什么地址x
不变?
int main(void) {
for (int i = 0; i < 5; i++) {
int x = i;
printf("x = %d", x);
printf(" &x = %d", &x);
printf("\n");
}
return EXIT_SUCCESS;
}
output
x = 0 &x = 1508435624
x = 1 &x = 1508435624
x = 2 &x = 1508435624
x = 3 &x = 1508435624
x = 4 &x = 1508435624
如果我想要一个指向 int, 的指针数组,int ** arr
是否需要单独初始化变量,因为地址在 for 循环中不会改变,例如
int num0 = 0;
int num1 = 1;
int num2 = 2;
int * arr[] = {&num0, &num1, &num2};
有没有更简单的方法来完成这项任务?
谢谢!
解决方案
局部变量每次实例化时都不需要具有不同(或相同)的地址。
无论如何,如果您打算在循环结束时保存该变量的地址,您将遇到未定义的行为,因为您的指针将指向不再使用的内存。
您需要为每个数组成员动态分配内存,以使它们不同,并避免创建单独的变量。
推荐阅读
- django - 中间截断文本,Django Template Tag
- node.js - NVM:npm install -g 一直使用错误的节点版本
- python - 基于连通邻域的布尔交集 - NumPy / Python
- node.js - express-validator - 自定义错误输出
- iptables - 如何使用 iptables 在 boinc 中打开端口
- jython - 我想知道是否可以在 jython 中调用 biopython 库?
- php - 如何访问具有动态更改键值的嵌套 JSON 对象
- javascript - 如何更改回调/承诺函数的结果?
- sql - SQL 每月滚动总和
- mercurial - 如何在 TortoiseHg 中创建一个中央存储库而不显示在存储库注册表中?