[当讨论指针和数组时,说明通常告诉您初始化数组,然后初始化指向相同内存位置的指针确实使您能够以与第一个数组相同的方式使用该指针:
int myIntArray[3] = {5, 6, 7};
int* ptr = myIntArray; // ptr[2] = myIntArray[2] = 7
我知道这是通过第一次初始化int myIntArray[3]
完成堆栈上的内存分配。但是,如果创建一个指针,它不会为数组分配潜在的内存。
因此,我的问题是,创建一个指针并将其直接用作数组是否安全,或者是否可能覆盖其他使用的内存?
int* ptr;
*ptr = 5;
*(ptr+1) = 6;
*(ptr+2) = 7;
[我的猜测是,如果地址(ptr+2)
将包含一些先前分配的内存,例如较早的初始化变量,则计算机将重新分配ptr
和(ptr+1)
到某个位置,如果以前从未使用过(ptr+2)
。
不,您的示例不安全。
当声明局部变量时,将使用堆栈中的随机值对其进行初始化。所以当你说int *x
时; int*
的值本质上是随机的。在这种状态下使用指针的问题是您不知道指针指向的位置。它是有效的内存吗?它是否指向您不想覆盖的内存?