【发布时间】:2022-01-05 00:50:55
【问题描述】:
我一直在看源代码,我偶然发现了这段代码
static char const *const delimit_method_string[] =
{
"none", "prepend", "separate", NULL
};
我以为我知道const关键字在C语言中的含义,但是看到这个语法后我很困惑,因为我无法解码语法的含义,所以我想知道像这样使用const 的含义我搜索了互联网我在stackoverflow 中看到了一些这样的问题,
但我仍然不明白该代码sn-p中的语法是什么意思,可能是因为我对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 的正确方法以及第一个代码 sn-p 中的语法如何工作,我真的很感激。
【问题讨论】:
-
你对第二个 sn-p 有什么期待?
-
@tstanisl 我以为我会像以前一样收到错误,但我没有收到任何错误
-
我发现我的 2 美分不足以得到答案,但我总是尝试向后阅读声明:所以
static char const *const delimit_method_string:delimit_method_string是const指针*指向到const((不可修改)char,即static。这有助于我理解它。 -
@DavidTóth 是的,这是有道理的,谢谢你的把戏:)
标签: c pointers syntax constants declaration