【发布时间】:2020-06-23 22:46:20
【问题描述】:
我在 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};
有没有更简单的方法来完成这项任务?
谢谢!
【问题讨论】:
-
更简单的方法是声明一个
int的数组。然后你的指针数组可以指向ints 数组的元素。但不清楚为什么需要一个指针数组。你可能想edit这个问题来解释一下。 -
x在堆栈上声明,因此它可能会在每次迭代时重用相同的内存......你为什么希望它移动? -
你每周为周日晚餐切蔬菜。令人惊讶的是,你总是在厨房里的同一个砧板上做这件事,每次都放在几乎完全相同的地方。我要说明的是,编译器(无论是链接器)没有理由在内存的不同部分创建该临时局部变量,因为情况 8 包括其他局部临时变量的数量和大小)总是相同的.
标签: c