const关键字进阶

 C/C++中const关键字用来表示其修饰的某个符号不能够被赋值,也就是说它的值对于这个符号来说是只读的,但是它并不能防止被程序内部的其他方法对该值的修改。也就是说const并不能把变量变成常量:

#include <iostream>

using namespace std;

int main()
{
    char *cp = new char[15];
    const char *ccp;
    ccp = cp;//以后ccp不能进行被赋值操作 
    ccp[0] = 'a'; //编译器会报错
    cp[0] = 'a';//程序中利用其他方法对ccp指向的内容进行修改是允许的 
    ccp = new char[16];//其中const还允许对其进行内容的重新指向
    return 0;    
} 


由const引发的参数与原型不匹配问题:

如:

//编译通过
foo1(const char*p){}
main(int argc, char *argv)
{
    foo1(arvg);
}

//编译不通过
foo2(const char**p){}
main(int argc, char **argv)
{
    foo2(arvg);//编译器报错显示参数类型不匹配
}


从ANSI C标准中对于约束条件的小结中有这么一句话:

每个实参都应该具有自己的类型,这样它的值就可以赋值给与它所对应的形参类型的对象(该对象的类型不能还有限定符)

上面这句话也就是说参数传递过程类似于赋值,再看以下赋值程序:

#include <iostream>

using namespace std;

int main()
{
    char *cp = new char[15];
    const char *ccp = new char[15];
    ccp = cp;//编译正确
    cp = ccp;//编译错误
    return 0;    
} 


在ANSI C中对于简单赋值描述了以下约束条件:

要使赋值的形式合法,必须满足下列条件之一:

两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。

根据以上条件,可以很清楚的知道ccp = cp;合法而cp = ccp;这一个赋值不合法的原因:

ccp指向的类型为有限定符类型,而cp指向的类型为无限定符类型。cp = ccp的赋值语句违反了以上规定。

同理对于foo1参数的传递来说,p指向的类型为有限定符类型,而argv指向的类型为无限定符类型,当调用函数时,类似于赋值,左指针为p,右指针为argv,满足约束,故编译器没有报错。

对于foo2参数的传递来说,p与cp均是没有限定符的指针类型,但是它们指向的类型不一样,p指向const char* 而cp指向char*,因此编译器必然会产生一条诊断信息。




内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值