2 angelacolin Angelacolin 于 2014.06.02 07:09 提问

C语言中这个指针定义是什么意思?

const char *const ch
为什么要2个const?分别是什么意思?顺便求详细说一下这个指针具体是什么意思?

编辑下,完整程序如下:

#include
#include
#include
#include

int find_char(const int, const char *const, const int);

int main(int argc, char argv) {
bool translate = false, squeeze = false, delete = false;
char *chars1, *chars2;
if (
++argv == '-') {
if (*++*argv == 's')
squeeze = true;
else if (**argv == 'd')
delete = true;
else {
printf("Unknown option -%s\n", *argv);
return EXIT_FAILURE;
}
++argv;
}
if (delete) {
if (argc != 3) {
printf("-d should be followed by exactly one string.\n");
return EXIT_FAILURE;
}
}
else if (squeeze) {
if (argc == 4)
translate = true;
else if (argc != 3) {
printf("-s should be followed by one string or two.\n");
return EXIT_FAILURE;
}
}
else if (argc != 3) {
printf("Without any option,"
" exactly two strings should be given as arguments.\n");
return EXIT_FAILURE;
}
else
translate = true;
chars1 = *argv;
if (translate && strlen(chars1) != strlen(chars2 = *++argv)) {
printf("The strings provided as arguments should have equal lengths.\n");
return EXIT_FAILURE;
}
int current, previous = '\0';
int nb_of_chars = strlen(chars1);
while ((current = getchar()) != EOF) {
if (delete) {
if (find_char(current, chars1, nb_of_chars) == nb_of_chars)
putchar(current);
continue;
}
int i = find_char(current, chars1, nb_of_chars);
if (translate) {
if (i != nb_of_chars)
current = chars2[i];
if (squeeze && (i = find_char(current, chars2, nb_of_chars)) != nb_of_chars)
current = chars2[i];
}
if (squeeze && i != nb_of_chars && current == previous)
continue;
putchar(current);
previous = current;
}
return EXIT_SUCCESS;
}

int find_char(int current, const char *const chars, const int nb_of_chars) {
for (int i = 0; i < nb_of_chars; ++i) {
if (current == chars[i])
return i;
}
return nb_of_chars;
}

3个回答

lym753024200
lym753024200   2014.06.02 09:25

楼主经常逃避结贴的话那就没人来回答了哟

lym753024200
lym753024200 彻底被你打败了。。。偷个支持票算了吧!
3 年多之前 回复
Angelacolin
Angelacolin 点了最新动态以后什么都没有……
3 年多之前 回复
lym753024200
lym753024200 动态中选择最新动态,选择这个帖子的名字,然后就会看到结贴
3 年多之前 回复
Angelacolin
Angelacolin 额,非常感谢你的回答,可我还是找不到哪里结贴。进入个人主页,动态,然后一片空白什么都没有。。。
3 年多之前 回复
lym753024200
lym753024200 进入个人主页->动态->这个帖子->结贴,后续步骤自己应该会
3 年多之前 回复
Angelacolin
Angelacolin 谢谢你的回答,请问怎么选为正确答案。。。只有有用和收藏这2个选项
3 年多之前 回复
lym753024200
lym753024200 第一个const是确保指针所指的内容不被改变,但这个指针产量的值可以改变。第二个const是确保这个指针变量的值保持不变,但这个指针所指内容可以改变。。同时用的话就是两者的结合了。问题解决记得选为正确答案
3 年多之前 回复
Angelacolin
Angelacolin 不好意思,刚才在外面
3 年多之前 回复
u013295579
u013295579   2014.06.02 09:48

第一个const是用来定义常量,而把ch声明成const,是为了确保ch指向的串不改变。一般情况下,标准库函数不需要修改调用变元指向的对象时,对应参数都声明成const型,确保在程序中调用时无误。

Angelacolin
Angelacolin 那第二个const呢?为什么要2个const?
3 年多之前 回复
u013295579
u013295579   2014.06.02 09:50

把你的完整程序发给我吧,我办你看一下。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!