返回信息流最近在看第一章,有几处疑问,首先,感觉程序中声明的 const *input没啥用啊我去掉后也能正常运行啊,可能是我对const的理解不够深刻?然后read_column_numbers中有句代码为while((ch = getchar()!=EOF && ch != '\n');虽然他有解释(明白他的意思,但感觉在这里没用吧),但是我也感觉没啥用啊,去掉了不也能正常运行么。
求大牛指导指导====
这是一条镜像帖。来源:北邮人论坛 / cpp / #79486同步于 2014/5/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C和指针中第一章的一个问题
Smeagol
2014/5/18镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
const 声明的指针是不能通过指针来修改那个值的 可以起到保护的作用
比如说做一个复制,在复制过程中当然不想无意中通过指针改变变量原来的值。
你觉得没什么用的 可能只是在这里没起到作用,不过这可能是一种很好的习惯
在别的工程中遇到这样写出错的几率也小 你去掉之后虽然在这个程序可能没错
换一种情况可能就出错了
我是这么觉得的 顺便占楼学习
【 在 Smeagol (Smeagol) 的大作中提到: 】
: 最近在看第一章,有几处疑问,首先,感觉程序中声明的 const *input没啥用啊我去掉后也能正常运行啊,可能是我对const的理解不够深刻?然后read_column_numbers中有句代码为while((ch = getchar()!=EOF && ch != '\n');虽然他有解释(明白他的意思,但感觉在这里没用
: 求大牛指导指导====
指向的是一个常量?不是很明白诶。。。
【 在 dajinsique 的大作中提到: 】
: 如果input 指向的是一个常量,你的函数就废掉了。
: 第二个问题没见过具体应用场景,不知道。
:
[ema13]
好吧,也没看清,你这个 const *input是什么东西?????是用作函数输入参数吗???
【 在 Smeagol 的大作中提到: 】
: 指向的是一个常量?不是很明白诶。。。
:
是的啊。。。
【 在 dajinsique 的大作中提到: 】
: 好吧,也没看清,你这个 const *input是什么东西?????是用作函数输入参数吗???
比如你的函数定义成:
void aaa(int * input)
{
...
}
然后在main函数里出现:
const int a = 0;
const int* pa = &a;
aaa(pa);
在 aaa(pa)这一行就会出错了。。。
【 在 Smeagol 的大作中提到: 】
: 是的啊。。。
1、const修饰符的作用是保护你指针指向的数据不变性,使程序稳定强壮。在这里没有硬性的规定,只是建议大家在写函数的时候,但凡变量在函数过程中不变,比如字符串拷贝、内存拷贝,对原变量加上const修饰符。避免在你写的函数执行体内部,不小心修改。
2、while((ch = getchar()!=EOF && ch != '\n');lz说明白这样做的原理,那我就不具体解释了。这样做的目的主要是在于回收第一行数据后面的无效数据和回车符,否则会被后面的scanf()当成输入读取。
这两个问题都是从程序的健壮性来考虑的,删去相应的代码也是能执行的,只是这样做,程序就会不适应一些偏的、古怪的输入导致程序崩溃。