在循环C中创建一个新指针

时间:2015-10-11 00:59:04

标签: c pointers

我试图在每次迭代时创建一个新指针。每个指向其自己的内存位置,在分配时保持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]

2 个答案:

答案 0 :(得分:1)

iid都是具有自动存储功能的局部变量(通常在堆栈中称为 )。在循环的每次迭代中,没有新的实例创建,重复使用相同的空间并在id中存储新值,因此打印的地址相同printf

请注意,id的值不能保证在迭代中保留,因为它超出了构成for循环体的块末尾的范围。

答案 1 :(得分:0)

如果您希望每个变量都有自己的地址并且在循环外可以进行可变,那么您可以做两件事。首先,最明智的是,创建一个由n个元素组成的数组,并在循环中设置xs[i]。其次,使用malloc()free()

顺便说一句,打印指针%p,而不是%d。指针的大小不一定与int相同。