我一直在看源代码,然后我遇到了这段代码
static char const *const delimit_method_string[] =
{
"none", "prepend", "separate", NULL
};
我曾以为我知道在C语言中
const
关键字的含义,但在看到这个语法之后,我感到困惑,因为我无法解码这个语法的含义,所以我想了解这样使用const
的含义。我在互联网上搜索,发现在stackOverflow上有一些类似以下问题:但是我仍然不理解代码片段中语法的含义,可能是因为我对C的基础知识掌握不够好,但我真的很想提高它。
因此,我编写了一些代码来了解那个语法如何工作,这就是我尝试的内容:
#include <stdio.h>
int main()
{
char a = 'A';
char b = 'B';
char const * const ptr = &a;
ptr = &b;
printf("a is %c\n", *ptr);
printf("a is %c", a);
return 0;
}
我得到了这个输出,有些是我所预期的。
$ gcc test.c
test.c: In function 'main':
test.c:9:13: error: assignment of read-only variable 'ptr'
9 | ptr = &b;
|
^
我修改了代码并再次进行了测试,
#include <stdio.h>
int main()
{
char a = 'A';
char b = 'B';
char const const *ptr = &a;
ptr = &b;
printf("a is %c\n", *ptr);
printf("a is %c", a);
return 0;
}
这次输出结果并非我所期望的内容,
$ ./a.exe
a is B
a is A
请问有人能解释在C语言中使用const
的正确方式是什么,以及第一个代码片段中的语法如何工作?
static char const *const delimit_method_string
:delimit_method_string
是一个指向const
(不可修改的)char
的const
指针*
,它是static
的。这有助于我理解它。 - Dávid Tóth