所有指针都是放在栈中吗,比如函数内局部指针变量、指向动态申请的对象的局部指针变量?
走同样的路,发现不同的人生
你说的函数内局部指针变量、指向动态申请的对象的局部指针变量
函数内局部指针变量、指向动态申请的对象的局部指针变量
int test = 0; //全局静态存储区 int* ptrTest = &test; // 这个指针自己也是在全局静态存储区上,指向的内存地址也是。 int main() { int a = 2;//栈上 int* ptr = &a;//ptr是在栈上,然后它指向的内存地址也是栈上的 int* ptrHeap = new int(2); // new是在堆上申请的内存,返回的是这个申请的内存的地址 // 然后ptrHeap是指向这个地址的,但是ptrHeap它自己是占的栈上的地址。 delete ptrHeap; return 0; }
指针自身是要占内存空间的,然后它又指向其它内存空间。
是吧,指向堆地址
函数指针变量本身并不都是栈变量。
举例说明:
int ** p = new int*;
对于这个例子,p是指针的指针,p也是指针,p指向的是一块存储了一个int值的内存块。但是,存储*p本身指针变量的内存是堆。
由此可见,指针变量和普通变量一样,可以是栈变量,也可以是堆变量。
肯定不是啊,指针也是变量,和其他变量没什么不一样,你想一下vector<int*>
你说的
函数内局部指针变量、指向动态申请的对象的局部指针变量
指针自身是要占内存空间的,然后它又指向其它内存空间。
是吧,指向堆地址
函数指针变量本身并不都是栈变量。
举例说明:
对于这个例子,p是指针的指针,p也是指针,p指向的是一块存储了一个int值的内存块。但是,存储*p本身指针变量的内存是堆。
由此可见,指针变量和普通变量一样,可以是栈变量,也可以是堆变量。
肯定不是啊,指针也是变量,和其他变量没什么不一样,你想一下vector<int*>