gpt4 book ai didi

c - char* 指向哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:29 24 4
gpt4 key购买 nike

我有一些关于指针和内存分配的非常基本的问题。

  1. 在下面的代码中,指针c 实际指向哪里?换句话说,字符串 "xyz" 存储在内存中的什么位置(堆栈/堆等)?

  2. 分配给 a 的内存位置会发生什么变化,因为我不再使用它了?

  3. 如果我取消对注释部分的注释,代码似乎运行良好。在这种情况下内存发生了什么?

     #include <stdio.h>

    main()
    {
    char *c;
    //c = (char *)malloc(2);
    c = "a";
    c = "xyz" ;
    printf("%s",c);
    return 0;
    }

输出:

xyz

编辑:

在阅读了一些答案和第一条评论后,我想到了另一个问题:

  1. 在下面的例子中,字符串存储在哪里?我可以稍后更改它们吗?

    char *c[] = {"a","xyz"};

最佳答案

  1. 具体细节取决于实现,但在大多数常见实现中,"a""xyz" 等文字字符串存储在程序,就像实现程序的机器码一样。分配 a = "xyz"; 设置 a 指向内存中的那个位置。

  2. "a" 的内存不受影响。但是,优化编译器可能会注意到 c 从未在该赋值和被重新赋值之间使用,因此它可以简单地忽略第一个赋值,并且永远不会为 "a" 分配任何空间> 完全没有。

  3. 您使用 malloc() 分配的内存将保持分配状态,直到程序结束。分配内存而不释放它称为内存泄漏,您应该尽量避免这种情况。

关于c - char* 指向哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24114877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com