gpt4 book ai didi

c - 为什么在 C 中使用指针定义时,我们将 `const` 用于字符串?

转载 作者:太空狗 更新时间:2023-10-29 14:56:55 25 4
gpt4 key购买 nike

For defining arrays with pointers, we write
int *const a;
because arrays have variable values but constant pointers. But for strings, we write
const char *s;.

我不明白为什么。这样对吗?字符串在 C 语言中真的有常量值和变量指针吗?

最佳答案

考虑以下几点:

char* a;
char* const b = "Hello"
const char* c;
const char* const d = "world";

a 只是指向一个字符。这可能是字符串的第一个字符,或单个字节。可以通过编写 *a='Z'a[0]='q' 或将 a 传递给函数来修改该字符采用 char* 参数。指针本身也可以修改为指向其他一些字符,例如a=b;a="foo";。这是最灵活的形式,也是最不安全的形式,因为您可以用它做任何事情。

b 是指向字符的常量指针。在本例中,它指向一个字符数组。这些字符可以修改,例如b[1]='a';*b=0;b 本身是常量,这意味着它永远不能指向 a内存的不同部分。当您分配了一个缓冲区或数组,其内容要修改但不能移动时,可以使用这种形式,因为它是由操作系统分配的。

c 指向一个常量字符。您可以更改它指向的内容 (c="foo";c=b;) 但您不能使用此指针更改它指向的字符 -- 即使它指向非常量缓冲区 b。这种形式通常在处理预生成的字符串时使用。您可以使用此变量来存储找到的字符串,并传递它们的地址,只要您不更改字符串本身即可。

d 是指向常量字符的常量指针。您不能更改它指向的字符,也不能将指针本身指向不同的内存位置。您所能做的就是读取字符串或单个字符(char e=d[4];puts(d);)。这种形式主要在传递引用字符串时使用,例如在命名真实对象时。

关于c - 为什么在 C 中使用指针定义时,我们将 `const` 用于字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52003506/

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