如果在循环内声明了一个指针变量,它是否与循环的每次传递相同的内存地址相关联?

Joh*_*ith 3 c++ pointers loops

如果你有一个变量,那么就有一个与该变量相关的内存地址,在指针变量的情况下,该内存地址的"值"是对内存地址的引用,该地址保存指针指向的实际数据. .

所以,如果我有:

for (int x = 0; x < 2; x++)
{
    char * a = (char*)malloc(20);
    printf("%p\r\n", &a);
    printf("%p\r\n", a);
}
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

    00999999
    04427310
    00999999
    0442ECF0
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,第一个和第三个内存地址对于循环的每次传递期间声明的指针变量保持不变,我的理解是这是因为前一个变量超出范围而下一个可用地址是相同的地址.

这种泛化可以扩展到循环内声明的所有变量,还是有异常?

Luc*_*ore 10

不,你不能概括这一点,并且不能保证a每次迭代的内存(指针,而不是它指向的内容)都是相同的.在这种情况下,内存被重用,它可能总是相同,但无法保证.

另请注意,您有内存泄漏.