为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包]

2017-09-17 24页 doc 53KB 355阅读

用户头像

is_321575

暂无简介

举报
《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包]《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包] 郝斌老师C语言1-10.rar (55.18 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%801-10.rar|57865482|b322d87b4e69ebabd47f4ae0febf900c|/ 郝斌老师C语言11-20.rar (74.16 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%...
《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包]
《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包] 郝斌老师C语言1-10.rar (55.18 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%801-10.rar|57865482|b322d87b4e69ebabd47f4ae0febf900c|/ 郝斌老师C语言11-20.rar (74.16 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8011-20.rar|77757827|561675cfa8356271d938ae124a823bc6|/ 郝斌老师C语言21-30.rar (74.06 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8021-30.rar|77659111|a2a65f1cdf2261ce156f94ecb2ff87dc|/ 郝斌老师C语言31-39.rar (54.99 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8031-39.rar|57663538|53996a50f85bc7a8a0790c8bb5aa0bee|/ 郝斌老师C语言40-49.rar (55.41 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8040-49.rar|58099187|0768c3236df1a22743bcc5a41091c6da|/ 郝斌老师C语言50-60.rar (462.46 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8050-60.rar|484925223|5d72749d972148098356adb3aa47701c|/ 郝斌老师C语言61-70.rar (77.08 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8061-70.rar|80822950|d9ebe813687a2cb602cd5a2dc57b739e|/ 郝斌老师C语言71-80.rar (119.06 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8071-80.rar|124838879|d9346d2ff0d0e34bdfde87ff60d04faa|/ 郝斌老师C语言81-89.rar.rar (73.89 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8081-89.rar.rar|77478321|2f137c242b64375fa90d149ad7b1033c|/ 郝斌老师C语言90-100.rar (79.27 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%8090-100.rar|83119054|22d9c1924defd2d04c5a590160bf4109|/ 郝斌老师C语言101-120.rar (510.8 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%80101-120.rar|535607833|01610a18ab8866a43eac6b62efb42f04|/ 郝斌老师C语言121-130.rar (199.7 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%80121-130.rar|209397213|555bea850a8dfcf3c6a51d66c290ba8e|/ 郝斌老师C语言131-150.rar (222.73 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%80131-150.rar|233544109|a75b5d04f39506cd00d3e04379eb16a4|/ 郝斌老师C语言151-180.rar (966.1 MB) ed2k://|file|%E9%83%9D%E6%96%8C%E8%80%81%E5%B8%88C%E8%AF%AD%E8%A8%80151-180.rar|1013032331|dc18527a3b8c47f5929556d1ab6998fc|/ 缺少的课.zip (59.9 MB) ed2k://|file|%E7%BC%BA%E5%B0%91%E7%9A%84%E8%AF%BE.zip|62812447|aadfc318af1372230794b5d9fd70f7a3|/ C视频源代码.rar (4.98 MB) ed2k://|file|C%E5%A4%A7%E7%BA%B2.pdf|5591050|29e95b6aaee8b35be7c5dabc304bf933|/ C大纲.pdf (5.33 MB) ed2k://|file|C%E5%A4%A7%E7%BA%B2.pdf|5591050|29e95b6aaee8b35be7c5dabc304bf933|/ 该教程视频录制工具(使用前请先运行内置绿化工具).rar (28.31 MB) ed2k://|file|%E8%AF%A5%E6%95%99%E7%A8%8B%E8%A7%86%E9%A2%91%E5%BD%95%E5%88%B6%E5%B7%A5%E5%85%B7%EF%BC%88%E4%BD%BF%E7%94%A8%E5%89%8D%E8%AF%B7%E5%85%88%E8%BF%90%E8 %A1%8C%E5%86%85%E7%BD%AE%E7%BB%BF%E5%8C%96%E5%B7%A5%E5%85%B7%EF%BC%89.rar|29680442|6fffe523a352524e453b4f008c13d2cd|/ ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、 存储类型关键字和其它关键字四类。 1 数据类型关键字(12个): (1) char :声明字符型 变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float: 声明浮点型变量或函数 (5) int: 声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明联合数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) (2)控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与 if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量 一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量) (3)register:声明积存器变量 (4)static :声明静态变量 4 其它关键字(4个): (1)const :声明只读变量 (2)sizeof:计算数据类型长度 (3)typedef:用以给数据类型取别名(当然还有其他作用 (4)volatile:说明变量在程序执行中可被隐含地改变 char 8 int 16 long 32 float 32 double 64 这是占的位数 bit 1 Byte=8 bit 除以8就是字节数 byte 编译环境设置好以后,就可以正式学习C语言了。 一、变量 (一)、变量类型和表示方法 1.什么是变量,一句话,变量是存储数据的值的空间。由于数值的类型有多种,有整数、小数(浮点数)、字符等等,那么对应的变量就有整型变量、浮点型变量、字符型变量。变量还有其他的具体分类。整型变量还可具体分为无符号型、长整型和短整型。浮点型也可分为单精度型、双精度型和长双精度型。此外还可以分为静态变量、外部变量、寄存器变量和自动存储变量。这些数据类型我们在本节和后面的章节中都会陆陆续续介绍。 那么变量我们总要给它取个名字吧,这个名字我们叫做标识符。 标识符的命名有一定的规则: (1).标识符只能由字母、数字和下划线三类字符组成 (2).第一个字符必须是字母(第一个字符也可以是下划线,但被视作系统自定义的标识符) (3).大写字母和小写字母被认为是两个不同的字符,如A和a是两个不同的标识符 (4).标识符可以任意长,但只有前32位有效。有些旧的C版本对外部标识符的限制为6位。这是由于链接程序的限制所总成的,而不是C语言本身的局限性 (5).标识符不能是C的关键字 2.从上面的规则中,有个关键字的概念。那么什么叫关键字呢, 从表面字意上也可以看出,关键字是C语言本身某些特性的一个表示,是唯一的代表某一个意思的。 下面列出ANSI定义的32个C语言的关键字,这些关键字在以后的学习中基本上都会用 到,到时再说它们的各自用法。 auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 1?C语言简洁、紧凑,使用方便、灵活。ANSI C一共只有32个关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed static sizeof struct switch typedef union unsigned void volatile while auto :声明自动变量 double :声明双精度变量或函数 int: 声明整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else :条件语句否定分支(与 if 连用) long :声明长整型变量或函数 switch :用于开关语句 case:开关语句分支 enum :声明枚举类型 register:声明寄存器变量 typedef:用以给数据类型取别名 char :声明字符型变量或函数 extern:声明变量是在其他文件正声明 return :子程序返回语句(可以带参数,也可不带参数) union:声明共用数据类型 const :声明只读变量 float:声明浮点型变量或函数 short :声明短整型变量或函数 unsigned:声明无符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句 signed:声明有符号类型变量或函数 void :声明函数无返回值或无参数,声明无类型指针 default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do :循环语句的循环体 while :循环语句的循环条件 static :声明静态变量 if:条件语句 C语言还包括一些不能用做标识符的扩展关键字。 asm cdecl _cs _ds _es far huge interrupt near pascal _ss 所以在以后的学习中,在给变量命名时要避开这些关键字。 3. Turbo C2.0规定所有变量在使用前都必须加以说明。一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量说明的形式如下: 类型 <变量表> 这里类型是指Turbo C2.0的有效数据类型。变量表是一个或多个标识符名,每个标识符之间用,分隔。 (二)、整型变量 整型变量是用来存储整数的。 整型变量又可具体分为好几种,最基本的整型变量是用类型说明符int声明的符号整型,形式如下: int Counter 这里int是类型说明符,Counter是变量的名字。 整型变量可以是有符号型、无符号型、长型、短型或象上面定义的普通符号整型。 整型是16位的,长整型是32位,短整型等价于整型。 以下是几种整型变量的声明示例: long int Amount /*长整型*/ long Amount /*长整型,等价于上面*/ signed int Total /*有符号整型*/ signed Total /*有符号整型,等价于上面*/ unsigned int Offset /*无符号整型*/ unsigned Offset /*无符号整型,等价于上面*/ short int SmallAmt /*短整型*/ short SmallAmt /*短整型,等价于上面*/ unsigned short int Month /*无符号短整型*/ unsigned short Month /*无符号短整型,等价于上面*/ 从上面的示例可以看出,当定义长整型、短整型、符号整型或无符号整型时,可以省略关键字int。 注明: 1.用signed对整型变量进行有符号指定是多余的,因为除非用unsigned指定为无符号型,否则整型都是有符号的。 2.当一个变量有几重特性时,声明关键字的顺序可以任意。以下几种声明是等价的: unsigned long T1 long unsigned T2 unsigned long int T3 unsigned int long T4 long unsigned int T5 long int unsigned T6 int unsigned long T7 int long unsigned T8 (三)、浮点类型变量 顾名思义,浮点类型变量是用来存储带有小数的实数的。 C语言中有三种不同的浮点类型,以下是对这三种不同类型的声明示例: float Amount /*单精度型*/ double BigAmount /*双精度型*/ long double ReallyBigAmount /*长双精度型*/ 这里Amount,BigAmount,ReallyBigAmount都是变量名。 浮点型都是有符号的。 (四)、字符型变量 字符型变量中所存放的字符是计算机字符集中的字符。对于PC机上运行的C系统,字符型数据用8位单字节的ASCII码表示。程序用类型说明符char来声明字符型变量: char ch 这条声明语句声明了一个字符型变量,标识符为ch。当以这种形式声明变量之后,程序可以在表达式中引用这个变量,关于语句和表达式的知识在后面将会介绍。 字符数据类型事实上是8位的整型数据类型,可以用于数值表达式中,与其他的整型数据同样使用。在这种情况下,字符型变量可以是有符号的,也可以是无符号的。对于无符号的字符型变量可以声明为: unsigned char ch 除非声明为无符号型,否则在算术运算和比较运算中,字符型变量一般作为8位有符号整型变量处理。 还有其他的如指针型变量,void型变量,以后再介绍。 二、常量 常量的意思就是不可改变的量,是一个常数。同变量一样,常量也分为整型常量、浮点型常量、字符型常量,还有字符串常量、转义字符常量和地址常量。 (一)、整型常量 整型常量可以是长整型、短整型、有符号型、无符号型。在Tubbo C 2.0里有符号整型常量的范围从-32768到32767,无符号整型的为0到65535;有符号长整型的范围为-2147483648到2147483647。无符号长整型的范围为0到4294967295。短整型同字符型。 可以指定一个整型常量为二进制、八进制或十六进制,如以下语句: -129, 0x12fe, 0177 常量的前面有符号0x,这个符号表示该常量是十六进制表示。如果前面的符号只有一个字母0,那么表示该常量是八进制。 有时我们在常量的后面加上符号L或者U,来表示该常量是长整型或者无符号整型: 22388L, 0x4efb2L, 40000U 后缀可以是大写,也可以是小写。 (二)、浮点型常量 一个浮点型常量由整数和小数两部分构成,中间用十进制的小数点隔开。有些浮点树非常大或者非常小,用普通方法不容易表示,可以用科学计数法或者指数方法表示。下面是一个实例: 3.1416, 1.234E-30, 2.47E201 注意在C语言中,数的大小也有一定的限制。对于float型浮点数,数的表示范围为-3.402823E38到3.402823E38,其中-1.401298E-45到1.401298E-45不可见。double型浮点型常数的表示范围为-1.79E308到1.79E308,其中-4.94E-324到4.94E-324不可见。 在浮点型常量里我们也可以加上后缀。 FloatNumber=1.6E10F /*有符号浮点型*/ LongDoubleNumber=3.45L /*长双精度型*/ 后缀可大写也可小写。 说明: 1. 浮点常数只有一种进制(十进制)。 2. 所有浮点常数都被默认为double。 3. 绝对值小于1的浮点数, 其小数点前面的零可以省略。如:0.22可写为.22, -0.0015E-3可写为-.0015E-3。 4. Turbo C默认格式输出浮点数时, 最多只保留小数点后六位 (三)、字符型常量 字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。 A, \x2f, \013 其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。 注意:在Turbo C 2.0中,字符型常量表示数的范围是-128到127,除非你把它声明为unsigned,这样就是0到255。 (四)、字符串常量 字符串常量就是一串字符,用双引号括起来表示。 Hello,World! \nEnter selection: \aError!!! (五)、转义字符 上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。下面给出所有的转义字符和所对应的意义: 转义字符 描述 \ 单引号 \”双引号 \\ 反斜杠 \0 空字符 \0nnn 八进制数 \a 声音符 \b 退格符 \f 换页符 \n 换行符 \r 回车符 \t 水平制表符 \v 垂直制表符 \x 十六进制符 它们的具体用法我们到讲输出语句时再介绍。 (六)、地址常量 我们前面说的变量是存储数据的空间,它们在内存里都有对应的地址。在C语言里可以用地址常量来引用这些地址,如下:&Counter, &Sum &是取地址符,作用是取出变量(或者函数)的地址。在后面的输入语句和指针里还会说明。 这一节所讲到的变量和常量知识可以说是在一切程序中都要用到,特别是变量的声明和命名规则。 (三) 运算符 无论是加减乘除还是大于小于,都需要用到运算符,在C语言中的运算符和我们平时用的基本上都差不多。 运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算符、自增自减运算符。大多数运算符都是二目运算符,即运算符位于两个表达式之间。单目运算符的意思是运算符作用于单个表达式。(具体什么是表达式下一节再说) 一、赋值运算符 赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为‘=’。这里并不是等于的意思,只是赋值,等于用‘==’表示。 注意:赋值语句左边的变量在程序的其他地方必须要声明。 得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为右值,因为她它们出现在赋值语句的右边。常数只能作为右值。 例如: count=5 total1=total2=0 第一个赋值语句大家都能理解。 第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算。这样它先total2=0然后total1=total2那么我们这样行不行呢, (total1=total2)=0 这样是不可以的,因为先要算括号里面的,这时total1=total2是一个表达式,而赋值语句的左边是不允许表达式存在的。 二、算术运算符 在C语言中有两个单目和五个双目运算符。 符号 功能 + 单目正 - 单目负 * 乘法 / 除法 求余 + 加法 - 减法 下面是一些赋值语句的例子, 在赋值运算符右侧的表达式中就使用了上面的算术运算符: Area=Height*Width num=num1+num2/num3-num4 运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。 取模运算符()用于计算两个整数相除所得的余数。例如: a=74 最终a的结果是3,因为74的余数是3。 那么有人要问了,我要想求它们的商怎么办呢, b=7/4 这样b就是它们的商了,应该是1。 也许有人就不明白了,7/4应该是1.75,怎么会是1呢,这里需要说明的是,当两个整数相除时,所得到的结果仍然是整数,没有小数部分。要想也得到小数部分,可以这样写7.0/4或者7/4.0,也即把其中一个数变为非整数。 那么怎样由一个实数得到它的整数部分呢,这就需要用强制类型转换了。例如: a=(int) (7.0/4) 因为7.0/4的值为1.75,如果在前面加上(int)就表示把结果强制转换成整型,这就得到了1。那么思考一下a=(float) (7/4)最终a的结果是多少, 单目减运算符相当于取相反值,若是正值就变为负值,若是负数就变为正值。 单目加运算符没有意义,纯粹是和单目减构成一对用的。 三、逻辑运算符 逻辑运算符是根据表达式的值来返回真值或是假值。其实在C语言中没有所谓的真值和假值,只是认为非0为真值,0为假值。 符号 功能 && 逻辑与 || 逻辑或 ! 逻辑非 例如: 5!3 0||-2&&5 !4 当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总的式子才为真。当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都为假时,总的式子才为假。逻辑非(!)运算是把相应的变量数据转换为相应的真/假值。若原先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。 还有一点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部分就不会进行运算了。例如: a=2,b=1 a||b-1 因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式就不会再计算了。 1. C语言中逻辑运算符(&&,||,!)和位运算符号(&,|,^)的区别 在C语言中,编程者经常混淆两组运算符:(&&,||,~)和(&,|,^)。第一组是逻辑运算符,它的操作数是布尔型,而第二组则是位运算符,其操作数是位序列。在布尔型操作数中,只有两个数值,0或1。C语言规定,在逻辑运算中,所有的非0数值都看做1处理。而位序列则可以是有无符号的字符型,整型,长短整型等。在位运算中,是相应的位之间进行逻辑运算。因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。通常,位运算操作数选择无符号型数据。 1.1. 应用实例 #include int main(int argc, char *argvs[]) { unsigned int a = 0x11; unsigned int b = 0x00; unsigned short s = 0x10; unsigned char c = 0x01; /* Logic operation */ if(a&&b) printf(“True: a && b is %d \n”, a&&b); else printf(“False: a && b is %d \n”, a&&b); if(a&&s) printf(“True: a && s is %d \n”, a&&s); else printf(“False: a && s is %d \n”, a&&s); if(a&&c) printf(“True: a && c is %d \n”, a&&c); else printf(“False: a && c is %d \n”, a&&c); if(s&&c) printf(“True: s && c is %d \n”, s&&c); else printf(“False: s && c is %d \n”, s&&c); /* Bit operation */ printf(“a & b is %x \n”, a&b); printf(“a & s is %x \n”, a&s); printf(“a & c is %x \n”, a&c); printf(“s & c is %x \n”, s&c); printf(“a & 0x110 is %x \n”, a&0x110); return 0; } 执行结果是: False: a && b is 0 True: a && s is 1 True: a && c is 1 True: s && c is 1 a & b is 0 a & s is 10 a & c is 1 s & c is 0 a & 0x110 is 10 四、关系运算符 关系运算符是对两个表达式进行比较,返回一个真/假值。 符号 功能 > 大于 < 小于 >= 大于等于 <= 小于等于 == 等于 != 不等于 这些运算符大家都能明白,主要问题就是等于==和赋值=的区别了。 一些刚开始学习C语言的人总是对这两个运算符弄不明白,经常在一些简单问题上出错,自己检查时还找不出来。看下面的代码: if(Amount=123) …… 很多新人都理解为如果Amount等于123,就怎么样。其实这行代码的意思是先赋值Amount=123,然后判断这个表达式是不是真值,因为结果为123,是真值,那么就做后面的。如果想让当Amount等于123才运行时,应该if(Amount==123) …… 五、自增自减运算符 这是一类特殊的运算符,自增运算符++和自减运算符对变量的操作结果是增加1和减少1。例如: Couter Couter ++Amount Amount++ 看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那么在运算之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加表达式的运算后再运算。这样讲可能不太清楚,看下面的例子: num1=4 num2=8 a=++num1 b=num2++ a=++num1这总的来看是一个赋值,把++num1的值赋给a,因为自增运算符在变量的前面,所以num1先自增加1变为5,然后赋值给a,最终a也为5。b=num2++这是把num2++的值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2自增加1变为9。 那么如果出现这样的情况我们怎么处理呢, c=num1+++num2 到底是c=(num1++)+num2还是c=num1+(++num2)这要根据编译器来决定,不同的编译器可能有不同的结果。所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。 六、复合赋值运算符 在赋值运算符当中,还有一类C/C++独有的复合赋值运算符。它们实际上是一种缩写形式,使得对变量的改变更为简洁。 Total=Total+3 乍一看这行代码,似乎有问题,这是不可能成立的。其实还是老样子,=是赋值不是等于。它的意思是本身的值加3,然后在赋值给本身。为了简化,上面的代码也可以写成: Total+=3 复合赋值运算符有下列这些: 符号 功能 += 加法赋值 -= 减法赋值 *= 乘法赋值 /= 除法赋值 = 模运算赋值 <<= 左移赋值 >>= 右移赋值 &= 位逻辑与赋值 |= 位逻辑或赋值 ^= 位逻辑异或赋值 上面的十个复合赋值运算符中,后面五个我们到以后位运算时再说明。 那么看了上面的复合赋值运算符,有人就会问,到底Total=Total+3与Total+=3有没有区别,答案是有的,对于A=A+1,表达式A被计算了两次,对于复合运算符A+=1,表达式A仅计算了一次。一般的来说,这种区别对于程序的运行没有多大影响,但是当表达式作为函数的返回值时,函数就被调用了两次(以后再说明),而且如果使用普通的赋值运算符,也会加大程序的开销,使效率降低。 七、条件运算符 条件运算符(?:)是C语言中唯一的一个三目运算符,它是对第一个表达式作真/假检测,然后根据结果返回两外两个表达式中的一个。 <表达式1>?<表达式2>:<表达式3> 在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。 例如: a=(b>0)?b:-b 当b>0时,a=b;当b不大于0时,a=-b;这就是条件表达式。其实上面的意思就是把b的绝对值赋值给a。 八、逗号运算符 在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。 假设b=2,c=7,d=5, a1=(++b,c,d+3) a2=++b,c,d+3 对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a=8。对于第二行代码,那么也是有三个表达式,这时的三个表达式为a2=++b、c、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=3。 还有其他的如位逻辑运算符,位移运算符等等,我们等到讲位运算时再说明。 九、优先级和结合性 从上面的逗号运算符那个例子可以看出,这些运算符计算时都有一定的顺序,就好象先要算乘除后算加减一样。优先级和结合性是运算符两个重要的特性,结合性又称为计算顺序,它决定组成表达式的各个部分是否参与计算以及什么时候计算。 下面是C语言中所使用的运算符的优先级和结合性: 优先级 运算符 结合性 (最高) () [] -> . 自左向右 ! ~ ++ + - * & sizeof 自右向左 * / 自左向右 + - 自左向右 << >> 自左向右 < <= > >= 自左向右 == != 自左向右 & 自左向右 ^ 自左向右 | 自左向右 && 自左向右 || 自左向右 ?: 自右向左 = += -= *= /= = &= ^= |= <<= >>= 自右向左 (最低) , 自左向右 在该表中,还有一些运算符我们没有介绍,如指针运算符、sizeof运算符、数组运算符[]等等,这些在以后的学习中会陆续说明的。 C语言变量类型 auto static external static external register auto 局部变量 auto 变量是用堆栈(stack)方式占用储存器空间,因此,当执行此区段是,系统会立即为这个变量分配存储器空间,而程序执行完后,这个堆栈立即被系统收回(在大括号{}内声明( 自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是 局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面 的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同名的变量,他们之间不会发生冲突的。因为他们都有自己的区域性, 而且它没有链接性(即:不允许其他的文件访问他的)。来看看自动量的持续性。计算机在执行这个函数的时候,创建并为它分配内存,当函数执行完毕返回后,自 动变量就会被销毁。这个过程是通过一个堆栈的机制来实现的。为自动变量分配内存就压栈,而函数返回时就退栈。 static 静态变量 static 变量是C程序编译器以固定地址存放的变量,只要程序不结束,内存不被释放( 静态变量与自动变量的本质区别是,静态变量并不像自动变量那样使用堆栈机制来使用内存。而是为静态变量分配固定的内存,在程序运行的整个过程中,它都会被 保持,而不会不销毁。这就是说静态变量的持续性是程序运行的整个周期。这有利于我们共享一些数据。如果静态变量在函数内部定义,则它的作用域就是在这个函 数内部,仅在这个函数内部使用它才有效,但是它不同于自动变量的,自动变量离开函数后就会被销毁,而静态变量不会被销毁。他在函数的整个运行周期内都会存 在。在函数外面定义的变量为全局变量,工程内的所有文件都可以访问他,但是它在整个工程内只能定义一次,不能有重复的定义,不然就会发生错误,而其他的文 件要想使用这个变量,必须用extern来声明这个变量,这个声明叫做引用声明。这一点很重要,如过你没有用extern 来声明在其他文件中已经定义的全局变量,就来使用它,就会发生错误如果你只是想在定义他的文件中使用它,而不允许在其他的文件中使用它,那么就用关键字 static来在函数外面声明变量。这样这个变量在其他文件中将不可见,即它的连接性而内部链接。有一点是我们只得注意的像:如果你在函数外这样声明一个 变量,const int a ; 变量a的连接性为内部链接,只能在定义他的文件内使用。还有如果你在定义静态变量的时候并没有给变量初始化,则静态变量将被自s动初始化为0; external 变量 外部变量 定义在程序外部,所有的函数很程序段都可以使用( 外部变量可能会在某一程序段被重新定义,以段内变量为参考值( static external 变量 静态外部变量和外部变量差别在于,外部变量生命可以同时给多个文件使用,而静态外部变量则只能给声明此变量的文件使用. register 变量 寄存器变量,是由寄存器分配空间,访问速度比访问内存快,加快执行速度.寄存器大小有限. 在c语言当中可以使用寄存器变量来优化程序的性能,最常见的是在一个函数体当中,将一个常用的变量声明为寄存器变量: register int ra; 如果可能的话,编译器就会为它分配一个单独的寄存器,在整个函数执行期间对这个变量的操作全都是对这个寄存器进行操作,这时候就不用频繁地去访存了,自然就提高了性能。但是寄存器变量不是强制性的,也就是说,即使你使用register关键字去声明一个变量为寄存器变量,编译器还是有可能把它作为一个普通的变量而不是寄存器变量来使用的。 需要注意的是,目前C编译器还不允许全局寄存器变量,也就是说寄存器变量只能是局部变量或者函数形参变量,而且最好是int,char或者指针类型变量。在声明寄存器变量的时候,可以制定使用哪个寄存器,在X86平台上常用的有”ebp, ebx, esi, edi“。 可以这样声明: register int local_var __asm__("ebp"); 这时候需要在编译程序的时候给出特别的选项,因为有些寄存器原本是另有用途的,比如ebp寄存器,原来是做frame-pointer用途的,在调试程序 的时候可以用它来跟踪程序的调用关系。这时候我们使用 -fomit-frame-pointer 选项来指明
/
本文档为【《郝斌C语言自学教程》郝斌老师C语言自学专讲180集完整版[压缩包]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索