gpt4 book ai didi

c - 关于char指针的几个问题

转载 作者:行者123 更新时间:2023-12-04 07:01:04 24 4
gpt4 key购买 nike

1- 这是如何工作的:

char *ptr = "hi";

现在编译器会将这个字符串放入内存(我猜是堆栈),并创建一个指向它的指针?这是它的工作原理吗?

2- 另外如果是在函数本地创建,当函数返回时,字符串占用的内存会被释放吗?

3- 最后但同样重要的是,为什么不允许这样做:ptr[0] = 'H'; ?

最佳答案

1) 字符串(通常)在堆栈上——它通常位于直接从可执行文件读取的初始化数据段中。然后将指针初始化为该字符串的地址。

2)没有

3) 因为标准说它给出了未定义的行为。想想你是否有过这样的事情:

int a() { char *a = "a"; printf("%s\n", a); }
int b() { char *b = "a"; *b = 'b'; }

int main() {
b();
a();
return 0;
}

现在,当您打印出a 时,您希望获得原始值(a) 还是更新后的值(b)?编译器可以但不一定共享此类静态字符串;有些还将整个区域标记为只读,因此尝试写入它会产生异常。

从 C 标准的角度来看,唯一合理的答案是称之为未定义行为。

关于c - 关于char指针的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960858/

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