![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c和指针
shijiemazhenda
这个作者很懒,什么都没留下…
展开
-
第一章
<br />1.注释://为行注释符,/* */为段注释符,由于注释不能嵌套,使用/* */注释段代码时往往不能如愿,建议使用#if指令<br />#if 0<br /> statements //段代码<br />#endif<br />2.在函数形参前加const,表示函数将不会修改函数调用者所传递的参数<br />3.数组参数是以引用的方式进行参数传递的,也就是地址调用,而标量和常量则是值传递的<br />4.NUL 和NULL分别是字符‘/0’字符和指向0地址的指针,都是整数,值都为0原创 2011-03-03 11:09:00 · 609 阅读 · 0 评论 -
第八章——多维数组
<br />1.多维数组在内存中的存储顺序为按照最右边的下标率先变化的原则。把数组的第一个下标解释为行或列并不会改变数组的存储顺序,只是行列的排列顺序不同而已,只要每次坚持使用同一种方法,每种解释都是正确的<br />2.使用指向整形的指针遍历一个整形原速度饿多为数组,这个技巧被称为flattening the array(压扁数组),实际上是非法的,因为从某行移到下一行就无法回到包含上一行的那个子数组,应该使用指向一维整型数组的指针来遍历二维整型数组<br />3.多维数组的数组名与一维数组名一样是表示数原创 2011-04-17 15:39:00 · 688 阅读 · 0 评论 -
第八章——一维数组
<br />1.数组名,除了作为sizeof操作符或单目运算符&的操作数时(sizeof返回数组的长度:包括初始化的和未初始化的,而不是指向数组的指针的长度;取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向数组类型的指针的指针),其他情况下,是一个常量指针(不是指针变量),指向数组第一个元素的地址(第一个元素也可以使一个数组),不能作为左值<br />2.数组可以在定义时直接初始化,或者在定以后逐个初始化,或者用循环来初始化,见给一个数组复制给另一个数组时,不能直接赋值,而应该使用循环逐个初始原创 2011-04-15 23:04:00 · 476 阅读 · 0 评论 -
第10章——结构和联合
1.C提供了两种类型的聚合数据类型:数组与结构。数据是相同类型的元素的集合,结构把不同类型的值存储在一起。数组的元素通过下标引用或指针间接访问来选择,结构成员通过名字来访问。与数组不同,它并不被替换成一个指针,它属于标量类型,它可以作为传递给函数的参数,也可以作为返回值从函数返回,相同类型的结构变量相互之间可以赋值。2.struct tag { member-list } variable-list ; struct tag varible variable-list; typedef struct原创 2011-05-10 18:08:00 · 463 阅读 · 0 评论 -
大小端——C语言
存根原创 2011-03-18 15:33:00 · 529 阅读 · 0 评论 -
第七章——函数
1.ANSI C 允许函数原型的使用,函数声明提供给编译器和之后的调用函数返回值类型,参数类型和数量的信息,而K&C用单独的列表给出参数的类型,编译器只记住函数的返回值类型,但不保存函数的参数数量和类型2.没有return语句的函数,隐式的返回3.函数的原型可以单独放于一个头文件中,一定要具有文件作用域,不能卸载块代码中4.当程序调用一个没有返回类型的函数时,编译器便认为该函数返回一个整型值5.swap(&a,&b),传递地址指针6.未赋初值的变量占用内内存,表现在数组中,sizeof(array)7.使用原创 2011-03-18 15:23:00 · 362 阅读 · 0 评论 -
可变参数列表:简单printf函数的实现
存根原创 2011-03-18 15:33:00 · 555 阅读 · 0 评论 -
第六章——指针
1.多字节数据的地址是在最左边还是最右边的位置,不同的机器有不同的规定,这也正是大端和小端的区别,地址也要遵从边界对齐2.高级语言的一个特性就是通过名字而不是地址来访问内存的位置,但是硬件仍然通过地址访问内存位置3.内存中的变量都是义序列的0或1的位,他们可以被解释为整数或者其他,这取决于他们被使用的方式,如果使用的是整数算数指令,这个值就被解释为整数,因此不能简单的通过一个值的位来判断它的类型4.如果我们把一个变量声明为某种类型,那么当程序方位这个变量时,编译器就会产生这种类型的指令,当采用不适当的方式访原创 2011-03-11 23:31:00 · 427 阅读 · 0 评论 -
第五章——操作符和表达式
<br />一、操作符<br />1.算数操作符中,除了%取模操作符只接受整型操作数之外,+ - * /既可适用浮点类型 又可使用于整型。<br />2.移位操作符中,算数左移和逻辑左移是相同的,而对于有符号数的右移操作,采用0填充还是符号位是因编译器而异的,因此是不可移植的。移位的位数为无符号整型<br />3.位操作符的操作数均为整型<br />4.赋值表达式的值为左操作符的值。getchar()和EOF,整型、字符型存在提升和截短的陷阱。复合型赋值操作符的效率更高<br />5.当sizeof的操作数原创 2011-03-07 21:57:00 · 508 阅读 · 0 评论 -
操作符的优先级和求值顺序——C语言
<br />1.操作优先级:<br />() [] -> . L-R<br />! ~ ++ -- - (type) * & sizeof R-L<br />* / % L-R<br />+ - L-R<br />>> << L-R<br />< > <= >= L-R<br />== != L-R<br />& L-R<br />^ L-R<br />| L-R<br />&& L-R<br />|| L-R<br />?: R-L<br /原创 2011-03-08 14:21:00 · 1805 阅读 · 0 评论 -
第四章——语句
<br />1.C并不具备布尔类型,而是用整型来代替,if和while只的判断表达式可以是任何能够产生整型结果的表达式<br />2.else隶属最靠近它的不完整的if语句<br />3.break用于结束整个循环,continue结束本次循环<br />4.<br />switch(exp1):<br />case exp2:<br /> exp21;<br /> ..........<br /> break;<br />case exp3:<br /原创 2011-03-06 10:30:00 · 343 阅读 · 0 评论 -
第三章——数据
<br />一、基本数据类型<br />1.四种基本类型:整型、浮点型、指针和聚合类型(如数组和结构、枚举等)<br />2.长整数至少和整型一样长,而整型至少应该和短整型一样长;<br />3.缺省的char要么是unsigned,要么是signed char,表准规定这取决于编译器,像int等一般默认为是signed,但arm-linux-gcc编译器将char定为signed char。<br />4.对于char类型的可移植性问题,只有把char型字符变量的值限制在signed和unsigned的交原创 2011-03-05 22:06:00 · 372 阅读 · 0 评论 -
float精度和数值范围
<br />float:一般的编译器为其分配的内存为4个字节,内存表示形式:符号为(1位)阶码(8位有符号整型数)尾数(23位)<br /> <br />精度:有效数字或者说小数点之后的位数为23位,2^(-23)=0.0000001,所以精度为6~7位,数值范围为1+1=2<br />数值范围:8位阶码可表示的有符号整数大小为-128~127,2^127=1.7*10^38,而尾数部分的数值范围为-2.0~2.0,由此可得出float数值范围为-3.4e38~3.4e38<br />原创 2011-03-07 12:31:00 · 4667 阅读 · 0 评论 -
第二章
1.C语言编译过程:预处理,编译,汇编,中间代码生成,代码优化,目标代码生成。预处理:宏替换,#include包含头文件,条件编译指令,typedef类型定义。编译:将预处理过的C生成汇编.s/.asm。汇编:将汇编代码生成中间代码.o文件。2.可执行程序,.out/.exe。目标文件:.o3.原创 2011-03-03 16:45:00 · 311 阅读 · 0 评论 -
第九章——字符串、字符和字节
1.字符串是一种重要的数据类型,是一串零个或多个字符,并且一个位模全为0的NUL字节结尾,但C语言中并没有显式的字符串数据类型,因为字符串是以字符串常量的形式出现或存储于字符数组中或者动态分配的内存中。2.strlen是接受一个字符串指针作为参数,返回该字符串的长度,类型为size_t,在头文件stddef.h中定义,是无符号整型,根据不同类型数据的混合运算原则及类型提升原则,无符号整型与有符号整型进行计算是,将提升为无符号整型进行计算,如果对用strlen函数计算的字符串长度进行比较,strlen(x)原创 2011-04-22 12:42:00 · 708 阅读 · 0 评论