C专家编程--笔记.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:5 大小:124KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C专家编程--笔记.doc

C专家编程--笔记.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.9阅读ACSIC标准,寻找乐趣和裨益1.参数传递过程类似于赋值。赋值合法条件:两个操作数都是指向有限定符或无限定符的相容类型指针。左边指针指向的类型必须具有右边指针所指向类型的全部限定符。例如:char*cp;constchar*cpp;cpp=cp;左操作数是一个指向有const限定符的char指针。右操作数是一个指向没有限定符的char指针。char类型与char类型是相容的,左操作数所指向的类型具有右操作数所指向类型的限定符(无),再加上自身的限定符(const)。2.constchar**p与char**cpp之间不能相互赋值。总结:非指针数据之间相互赋值。const可以赋值给非const变量。反过来则不可以。chara;constcharb;a=b//OK;b=a//error指针数据类型之间相互赋值。A.首先看这2个指针本身数据类型是否一致(是否遵循数据类型隐式转换规则,遵循则可以赋值const可以赋值给非const),constchar*a;char*b;指针a(字符指针)与指针b(字符指针)之间可以相互赋值,编译时可能会产生警告但不会产生错误。但b=a会产生警告(丢失指针目标类型的限定)。B.若A满足条件,再看指针所指向的数据类型是否一致,或则遵循1所描述的规则(逆隐式转换规则)。constchar**a;char**b;a=b;//waring指针类型不相容b=a;//waring指针类型不相容*a=*b;//OK*b=*a;//waring丢失指针目标类型的限定**a=**b;//error**b=**a;//OKconstchar*c;char*constd;char*e;c=d;//OK--经典例子,理解d=c;//error*c=*d;//error*d=*c;//OKc=e;//OKe=c;//waring丢失指针目标类型的限定*c=*e;//error*e=*c;//OKd=e;//errore=d;//OK*d=*e;//OK*e=*d;//OKconstcharcca;charca;ca=cca;//OKcca=ca;//error3.关键字const不等于常量,表示这个变量不能被赋值,但不能防止通过程序内部的方法来修改这个值。1.10“安静的改变“究竟有多少安静1.字符和整型(整型升级)如果int可以完整表示源类型的所有值,那么该源类型就转换为int,否则转换为unsignedint。2.寻常算术转换许多操作数类型为算术类型的双目运算符会引发转换,并以类似的方式产生结果类型。它的目的是产生一个普通类型,同时也是算术运算结果的类型。当执行算术运算时,操作书的类型如果不同,就会发生转换。数据类型朝着浮点精度更高,长度更长的方向转换。#include<stdio.h>intmain(){intd=-1;unsignedinta=2;if(d<=sizeof(int))printf("true\n");elseprintf("false\n");if(d<=a)printf("true\n");elseprintf("false\n");if(d<=2)printf("true\n");elseprintf("false\n");return0;}结果:falsefalsetrue分析:sizeof(int)为unsgined类型,而d为int型,int型的数据范围<unsigned的,所以d转换为unsigned,为4294967295>4,所以结果为false。1.11轻松一下--由编译器定义的Pramgmas效果2.2.2相邻的字符串常量将被自动合并成一个字符串。printf("duan""long""fei");=printf("duanlongfei");2.2.3太多的缺省可见性定义C函数时,在缺省情况下函数的名字是全局可见的。2.3误做之过static在函数内部,表示该变量的值在各个调用间保持延续性在函数这一级,表示该函数只对本文件可见extern用于函数定义,表示全局可见用于变量,表示在其它地方定义C语言声明的优先级规则A声明从它的名字开始读取,然后安照优先级的顺序依此读取。B优先级从高