随笔分类 -  C语言

摘要:1、cpu中的一个地址所对应的存储单元不能存很多东西,只能存一个字节,所以以前讲过的int 、float等多字节的数据类型保存在内存中要占用多个地址,这种情况下把起始地址当作这个数据的地址。2、内存的读写过程: 1 . CPU内部将寄存器对接到数据总线上,使寄存器的每一位对接到一条数据线,等待接收数据。 2 . CPU将内存地址通过地址线发给内存,然后通过另外一条控制线发一个读请求。 3 . 内存收到地址和读请求之后,将相应的存储单元对接到数据总线的另一端,这样,存储单元每一位的1 或0 状态通过一条数据线到达CPU寄存器中相应的位,就完成了数据传送。3、操作设备的过程就是对这些设备寄存... 阅读全文
posted @ 2013-12-23 11:28 tony7373 阅读(177) 评论(0) 推荐(0)
摘要:1、如果一个操作数后面有多个后缀,按照离操作数从近到远的顺序(也就是从左到右)依次运算,比如a.name++ ,先算a.name ,再++,这里的.name应该看成a 的一个后缀,而不是把. 看成双目运算符。2、单目运算符,包括前缀自增++、前缀自减-- 、sizeof 、类型转换() 、取地址运算& 、指针间接寻址* 、正号+ 、负号- 、按位取反~ 、逻辑非! 。如果一个操作数前面有多个前缀,按照离操作数从近到远的顺序(也就是从右到左)依次运算,比如!~a ,先算~a,再求! 。3、乘* 、除/ 、模% 运算符,加+ 、减- 运算符,移位运算符>,关系运算符 =,相等性运算符 阅读全文
posted @ 2013-12-23 08:08 tony7373 阅读(173) 评论(0) 推荐(0)
摘要:1、数组不能相互赋值,如:a[5]=b[5] 数组不能作为函数的返回值如:void test(int a[5]) {...}2、如果数组名放在=号的右边,那么这个数组会自动转换成数组首元素的指针。这样就可以解释上面为什么a[5]=b[5]是错误的赋值方式了,因为右边的b[5]自动转换成了指针,不能将指针赋值给数组。比较: printf(%s ,str);和scaf(%s,&str);前一个自动转换成指针进行传递,而第二个是输入的函数表达式需要使用&符号表示输入传递给一个指针类型。3、看这样的调用:int array[5] = {};foo(array); 这里的使用方法不会报错 阅读全文
posted @ 2013-12-14 17:37 tony7373 阅读(411) 评论(0) 推荐(0)
摘要:1、整形、字符、布尔、浮点,这些可以成为基本数据类型。他们和字符串和数组有什么区别? 字符串和数组是一种复合型数据类型,他们由基本数据类型组成,一方面可以从整体上当做一个数据来使用,另一方面也可以分别访问它的各个组成单元。 函数名是什么的抽象?是多条语句组合起来的抽象表达。 结构体是一种数据类型的组合和抽象。2、int main(void){ complex_struct{int x,y;} z; int x; } z.x和x这两个x有什冲突吗,编译器是怎么区分这两个x的?变量z的成员变量x总是用"."这个符号来访问的,他们属于不同的命名空间。结构体中的成员变量xy的存储空 阅读全文
posted @ 2013-12-14 15:26 tony7373 阅读(797) 评论(0) 推荐(0)
摘要:目录1、math.h头文件编译2、main函数分析(待补充)3、局部变量,函数中定义的变量///////////////////////////////////////////////////////////////////////////////////////////////1、math.h头文件编译math.h在用gcc编译时如下:gcc main.c -lm需要在后面加-lm,因为数学函数位于libm.so库文件中(通常在/lib目录下),-lm 选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。而大部分库函数(例如printf )位于libc.so库文件中,以后称为libc 阅读全文
posted @ 2013-11-29 17:20 tony7373 阅读(185) 评论(0) 推荐(0)