当前位置: 首页 > 知识库问答 >
问题:

函数中的局部指针变量的存储时间是什么类型的?它们存储在哪里?

汪典
2023-03-14

静态存储持续时间。对象的存储在程序开始时分配,在程序结束时释放。该对象仅存在一个实例。在命名空间范围(包括全局命名空间)声明的所有对象都有这个存储持续时间,加上那些用static或extern声明的对象。有关使用此存储持续时间初始化对象的详细信息,请参见非局部变量和静态局部变量。

我的另一个问题是,为什么在第二次进入函数时,系统将仍然被xptr指向的相同内存地址0x00000041C69EF754分配给临时变量x

void localPointer()
{
    int x = 10; 
    static int* xPtr = &x; // 0x00000041C69EF754 - 0a 00 00 00 (data the address contains)
    std::cout << "end of function" << std::endl;
}

int main()
{
    // first enter
    localPointer();

    /* 
        the address 0x00000041C69EF754 and its value still 
        exsit out of the scope of the function localPointer
    */
    std::cout << "-----------------------------------------" << std::endl;

    // second enter
    localPointer();
    return 0;
} 

共有1个答案

孙承弼
2023-03-14

您的指针也是一个正常的静态变量;在使用new创建指针时,指针的值是动态的。

在您的示例中,指针一直指向一个本地堆栈变量,该变量没有更改,因为当您输入函数时,会重新创建相同的堆栈。

尝试从另一个级别调用这个函数,这样RSP值就会发生变化,看看会发生什么。例如,创建另一个函数,然后从它调用这个函数。

 类似资料:
  • 本文向大家介绍HTML5有哪些存储类型?它们之间有什么区别?相关面试题,主要包含被问及HTML5有哪些存储类型?它们之间有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 cookie: 最大 4k, 基本无兼容问题, 所有同源tab 共享, 每次请求都携带, key-value 存储, value 只存字符串 sessionStorage 无大小限制, 只在当前 tab 有效, tab 关闭

  • 问题内容: 请看以下示例: 首先,存放在哪里?是吗: 由编译器复制到引用它的内部类的隐藏成员变量中 复制到堆并在堆上引用 留在堆栈上并以某种方式引用 其他的东西 我的 猜测 是第一选择。 其次,要做到这样做所引起的任何性能问题(而不是简单地作为类的成员变量创建并按其引用),尤其是当您创建大量引用最终局部变量的内部类构造时。 问题答案: 是的,它们已被复制,这就是为什么您必须将变量声明为final的

  • 我正在学习虚拟内存和自由空间管理。 我知道我们使用malloc分配的指针将请求堆中的一块内存。但是当我们调用malloc()系统调用时,它将返回一个整数作为专用内存块的地址,但是这个地址本身将存储在哪里呢? 假设 返回我的4008地址。它从4008到4022开始。这个块在堆中。但是4008本身在哪里? 它存储在堆栈中吗?

  • 3. 变量的存储布局 首先看下面的例子: 例 19.2. 研究变量的存储布局 #include <stdio.h> const int A = 10; int a = 20; static int b = 30; int c; int main(void) { static int a = 40; char b[] = "Hello world"; register int c = 50

  • 问题内容: 我正在读一本叫做《 Go编程语言》的书,在有关指针的第二章中,写了以下内容 函数返回局部变量的地址是绝对安全的。例如,在下面的代码中,即使调用返回后,由对f的特定调用创建的局部变量v仍将存在,并且指针p仍将引用它: 我完全不明白这一点,应该在执行函数后销毁局部变量。是因为可能v是在堆上分配的。我知道在C语言中,如果您使用malloc分配空间,函数执行后就不会销毁它,因为它在堆上。 问题

  • 问题内容: 被存储在客户端或服务器上的变量? 问题答案: 变量存储的位置由PHP的配置确定。通常这是在Linux / Unix系统上。如果无法100%确定,请使用此功能查看您的特定设置,方法是在您域的中创建具有以下内容的文件: