我试图在每次迭代时创建一个新指针。每个指向其自己的内存位置,在分配时保持i的值。我的方法如下,但是当我打印id的地址时,每次迭代都是一样的。
码
for(i=1;i<=n;i++){
int id = i;
printf("i[%p], ",&i);
printf("id[%p]\n",&id);
}
输出
i[565782000], id[565782004]
i[565782000], id[565782004]
i[565782000], id[565782004]
答案 0 :(得分:1)
i
和id
都是具有自动存储功能的局部变量(通常在堆栈中称为 )。在循环的每次迭代中,没有新的实例创建,重复使用相同的空间并在id
中存储新值,因此打印的地址相同printf
。
请注意,id
的值不能保证在迭代中保留,因为它超出了构成for
循环体的块末尾的范围。
答案 1 :(得分:0)
如果您希望每个变量都有自己的地址并且在循环外可以进行可变,那么您可以做两件事。首先,最明智的是,创建一个由n个元素组成的数组,并在循环中设置xs[i]
。其次,使用malloc()
和free()
。
顺便说一句,打印指针%p
,而不是%d
。指针的大小不一定与int相同。