gpt4 book ai didi

c - const 限定符和 Const 指针

转载 作者:行者123 更新时间:2023-11-30 17:28:04 27 4
gpt4 key购买 nike

我总是对 const 指针感到困惑。谁能用简单的方式解释一下以下内容是什么代码片段试图说。我知道他们在说什么,但我需要理由以简单的方式。谢谢

    char *p="Hello";                 /*pointer is variable,so string is*/
*p='M';
p="BYE"; /*works*/
p="Bye"; /*works*/

const char *q="Hello"; /*string is constant pointer is not */
*q='M'; /*Error*/
q="BYE"; /*works*/

char const *s="Hello"; /*string is constant pointer is not */
*s='M'; /*Error*/
s="BYE"; /*works*/

char* const t="Hello"; /*pointer is constant string is not */
*t='M'; /*works*/
t="BYE"; /*error*/

const char* const u="Hello"; /*string is constant,so is pointer*/
*u='M'; /*error*/
u="BYE"; /*error*/

最佳答案

其实这三个代码片段

    char *p="Hello";                 /*pointer is variable,so string is*/
*p='M';
p="BYE"; /*works*/
p="Bye"; /*works*/

const char *q="Hello"; /*string is constant pointer is not */
*q='M'; /*Error*/
q="BYE"; /*works*/

char const *s="Hello"; /*string is constant pointer is not */
*s='M'; /*Error*/
s="BYE"; /*works*/

在您不能更改指针指向的对象的意义上是等效的。不同之处在于,在 q 的定义中添加限定符 const 可以让编译器在编译时发现错误。

您不得修改字符串文字。任何修改字符串文字的尝试都会导致程序的未定义行为。在 C 中,字符串文字具有非常量字符数组类型。然而,像第二个代码片段中那样添加限定符 const 可以让编译器在编译时发现错误。

C 标准(6.4.5 字符串文字)

7 It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

记录之间除了美观之外没有任何区别

const char *

char const *

两者都定义了指向常量对象的指针。指针本身并不是恒定的。

但是如果你写成下面的方式

char s[] ="Hello";                 /*pointer is variable,so string is*/
char *p = s;
const char *q = s;
*p='M';
*q='M';

那么使用带或不带 const 限定符的指针是有区别的,因为您可能会更改字符数组。对于最后一条语句,编译器将发出错误。

最后两个代码片段与前三个代码片段的不同之处在于,最后两个定义常量指针,即指针的值不能更改。然后您尝试重新分配常量指针,编译器会发出错误。常量对象在定义时应进行初始化。

关于c - const 限定符和 Const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158716/

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