php开发网站的优势,批量关键词排名查询工具,外贸网站分类,网站new图标C语言——关键字 宗旨#xff1a;技术的学习是有限的#xff0c;分享的精神是无限的。 【谨记#xff1a;尽量不要用printf函数#xff0c;要去看变量的值#xff0c;内存的值。】 auto#xff0c;int#xff0c;double#xff0c;long#xff0c;char#xff0c;fl…C语言——关键字 宗旨技术的学习是有限的分享的精神是无限的。 【谨记尽量不要用printf函数要去看变量的值内存的值。】 autointdoublelongcharfloatshortsignedunsignedstructunionenumstaticswitchcasedefaultbreakregisterconstvolatiletypedefexternreturnvoidcontinuedowhileifelseforgotosizeof。
【定义和声明定义创建了对象并为这个对象分配了内存声明没有分配内存。】
auto //声明自动变量缺省时编译器一般默认为auto int //声明整型变量 double //声明双精度变量 long //声明长整型变量 char //声明字符变量 float //声明浮点型变量 short //声明短整型变量 signed //声明有符号类型变量 unsigned //声明无符号类型变量 struct //声明结构体变量 union //声明联合类型数据 enum //声明枚举类型 static //声明静态变量 switch //用于开关语句 case //开关语句分支 default //开关语句中的其他分支 break //跳出当前循环 register //声明寄存器变量 const //声明只读变量 volatile //说明变量在程序执行中可被隐含地改变 typedef //用以给数据类型取别名 extern //声明变量是在其他文件正声明(也可以看做是引用变量) return //子程序返回语句(可以带参数也可不带参数) void //声明函数无返回值或无参数声明空类型指针 continue //结束当前循环开始下一轮循环 do //循环语句的循环体 while //循环语句的循环条件 if //条件语句 else //条件语句否定分支(与if连用) for //一种循环语句 goto //无条件跳转语句尽量少用或者不用 sizeof //计算对象所占内存空间大小这不是个函数
我在这儿只说一些比较常用而且比较重要的关键字 1. register
请求编译器尽可能的将变量存到CPU内部寄存器中而不是通过内存寻址访问以提高效率。。对这种变量不可以使用取址运算符来获取其地址因为它不再内存中。寄存器变量用的不算多但是还是得知道是什么意思。 2. static--- 修饰变量和函数限定作用域
1.修饰变量
//变量又分为局部和全局变量但它们都存在于内存的静态区。 //静态全局变量作用域仅限于变量被定义的文件中其他文件即使用extern声明也没法使用。 准确地说作用域是从定义之处开始到文件结尾处结束在定义之处前面的代码行也不可以使用。 //静态局部变量在函数体里面定义的就只能在这个函数里用同一个文档中的其他函数也用不了。 由于被static修饰的变量松狮存在内存的静态区所以即使这个函数运行结束 这个静态变量的值还是不会被销毁函数下次使用时仍然能用。
2.修饰函数
//函数前加static使得函数成为静态函数。 但此处static的含义不是指存储方式而使指对函数的作用域仅局限于本文件(所以又称内部函数)。 使用内部函数的好处是不同的人编写不同的函数时不用担心自己定义的函数是否会与其他文件的函数同名。
//在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。 //随后static在C中有了第二种含义用来表示不能被其他文件访问的全局变量和函数。 为了避免引入新的关键字所以仍然使用static关键字来表示这第二种含义。 3. 基本数据类型short、long、int、char、float、double共6种
构造数据类型数组、结构体struct、公用体union、枚举类型enum
空类型void
【short为2个字节int为4个字节long为4个字节float为4个字节、 double为8个字节char为1个字节一般情况下】
【隐式类型转换shortchar → int →unsigned int → long → double主干道 ←float】 4. sizeof关键字计算变量所占空间 – 数组做函数参数时退化为指针4字节 sizeof (int)*p ----- sizeof(int) * p 4p 再次强调sizeof不是函数而是关键字。 5. signed和unsigned关键字
//32位的signedint类型整数其值表示范围为-2^31~2^31-1 //8位的signed char类型其值表示范围为-2^7~2^7-1 //32位的unsigned int类型整数其值表示范围为0~2^32-1 //8位的unsigned char类型其值表示范围为0~2^8-1 在计算机中数值是以补码的形式存储使用补码可以将符号位与其他位统一处理同时减法也可以按加法处理。 6. if和else关键字
写if语句时一般情况下先处理正常情况再处理异常情况以便提高效率可读性也较好bool一般初始化为false比较好int,float,指针变量 与0的比较问题整形可以直接与0比较float是实型不能精确到0指针变量与NULL
if(flag) --- bool
if(0 i) --- int
if(i -0.000001 i 0.000001) --- float
if(NULL p) --- 指针变量 7. switch/case关键字【解决多分支的问题】 每个case语句结尾加break最后必须使用default分支。
case后面只能是整形或者字符型的常量或常量表达式。 8. do/while/for关键字3种循环结构
while先判断while后面括号里的值如果为真则执行其后面的代码否则不执行 do-while先执行do后面的代码然后再判断while后面括号里的值如果为真循环开始否则循环不开始。用法和while没有区别但相对较少用。--- 至少执行一次 for可以很容易的控制循环次数多用于事先知道循环次数的情况。
【多重循环时最长的循环放在最内层最短的放在最外层以提高执行效率循环不要超过3层嵌套】 9. break终止本层循环continue终止本次循环开始下一次循环return终止函数。 10. void关键字“空即是色”--- 很强大 --- 函数返回值的限定函数参数的限定。
任何指针类型都可以直接赋给void *类型反过来就不行不能定义一个void变量。
//void *memcpy(void *dest, const void *src, size_tlen);
//void *memset(void *buffer, int c, size_t num);
能说的比较少但是void关键字真的是很强大这点毋庸置疑。 11. return关键字 --- 终止一个函数并返回其后跟的值 【别返回栈内存的的指针因为该内存在函数体结束时被自动销毁会导致程序错误】 12. const关键字 ---- 不是“常量”而是“只读变量”用得好的话大大提高程序的效率
const修饰的是只读的变量其值在编译时不能被使用因为编译器在编译时不知道其存储的内容。 const推出的初始目的正是为了取代预编译指令消除它的缺点同时继承它的优点。
const和define的区别const修饰的只读变量并且在定义的同时进行初始化const可以节省空间避免不必要的内存分配同时提高效率修饰一般变量一般变量是指简单类型的只读变量修饰数组修饰指针修饰函数的参数当不希望这个参数值被函数体内意外改变时使用修饰函数的返回值表示返回值不可被改变在另一连接文件中引用const只读变量。
【编译器通常不为普通const只读变量分配存储空间而使将它们保存在符号表中这使得它成为一个编译器件的值没有了存储与读内存的操作使得它的效率也很高const定义的只读变量从汇编的角度看只是给出了对应的内存地址而不是像define一样给出的立即数】
const M 3; int a[M]; --- 错误的数组里面不能是变量即使是只读
#define M 3 int a[M]; --- 正确的预处理的时候做宏替换
const int *p;//p可变p指向的对象不可变
int const *p;//p可变p指向的对象不可变
int *const p;//p不可变p指向的对象可变
const int *const p;//指针p和p指向的对象都不可变 13. volatile关键字 --- 判别普通工程师和嵌入式工程师 防止编译器优化做嵌入式这行的不认识这个关键字就要回家多修炼修炼啦 14. extern关键字
extern修饰变量或者函数以表示变量或者函数的定义在别的文件中。从而提示编译器遇到此变量和函数时在其他模块中寻找其定义。 15. struct关键字 --- 写程序的时候尽量别使用全局变量而是打包成结构体 将相关联的数据打包成一个整体空结构体的大小不是0而是1 柔性数组结构体最后的数组大小未知内核链表中用柔性数组较多。
Type *p( Type*)malloc(sizeof(Type)100*sizeof(int));
【柔性数组与结构体没关系算不上结构体的正式成员。】
struct和class默认属性不同struct是publicclass是private。 16. union关键字 大小是联合体中最大的成员的大小而不是所有成员的大小和此点和结构体不同同一时间联合体只能访问数据成员中的一个不能访问多个。
用联合体可以判断大小端模式的问题 void check(void)
{union{inti;intj;} stu;stu.i 5;return(5 stu.j):1,0;
}17. enum关键字 --- 枚举定义的是一堆常量比如星期颜色等 18. typedef关键字 --- 起别名注意与define的区别,个人认为比define好用
typedef unsigned char uchar;
#define uchar unsigned char
(typedef结尾加分号define不需要)
推荐使用typedef因为在给指针进行替换的时候define往往达不到效果;
#define char* PPP
PPP a,b;//只有a是char*的b不是用typedef就不同