c笔记整理

来源:互联网 发布:电子翻书制作软件 编辑:程序博客网 时间:2024/06/06 03:37

Day1:主要讲c指针    (数组,字节,位,倒序)

 

(经典题目:倒倒倒(数据空间、操作对象今天只讲了这个),删删删,压压压)

 

测试题

1.用宏定义一年的秒数 ,不能自己算。

2.用带参数宏定义的时候一定要注意括号。

 

3.


a)、一个整型数An integer   

int a

b)、一个指向整型数的指针A pointer to an integer

Int *p

c)、一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to apointer to an intege

Int* *p

d)、一个有 10 个整型数的数组An array of10 integers

Int a[10]

e)、一个有 10 个指针的数组,该指针是指向一个整型数的。                                                                                 

An array of10 pointers to integersInt *a[10]   

f)、一个指向有 10 个整型数数组的指针A pointer to an array of10 integers

Int  (*p)[10]                      Typedef int XXX[10] ; XXX *p

g)、一个指向函数的指针,该函数有一个整型参数并返回一个整型数

    (A pointer to a function that takes an integer as an argument and returns an integer

       Int  (*p)(int)                   Typedef int XXX(int); XXX*p;

h)、一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

    (An array of ten pointers to functions that take an integer argument and return an integer  


         Int  (*a[10]) (int)                 Typedef int XXX (int) ; XXX *a[10]

 

4.关键字 static 的作用是什么?

1)在函数体,一个被声明为态的变量在这一函数被调用过程中维持其值不变。 

2)在模块内(但在函数体外) ,一个被声明为态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3)  在模块内,一个被声明为态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

 

Const 与 volitile 的含义与区别

5.http://blog.163.com/darkbus@126/blog/static/75192241201079101942565/

6.一个位置1  或上1  ;; 置0  与上1取反;; 取某一位  与上1

7.学c就是玩内存。将现实世界数字化,用c描述需求,交与计算机处理。

8.             内存。。。内核空间。。参数区(argcargv)。。栈(能用地址,和名字访问)。。 。。。 。。       分。             堆(malloc)  字符常量区(static 全局变量 有只读区,有可读可写区)

在内存中,只有10100数据,地址,与空间大小,没有其他的概念

9.对内存的操作有四种。。

a) 分配 (定义变量)

i. 栈:在(){}中定义或申明的变量 普通变量(非voletile regist static)函数结束即回收

ii. 堆:用malloc申明的变量

iii. Data区:全局变量,静态变量。如char*p=”aaa”.

iv. Code区:b=a<<10;

b) 查看 (strlen printf

i. 想怎么看就怎么看,用指针的化很自由,只要不是野指针,不会受到任何限制。

c) 改写 (scanf

d) 拷贝 (倒字节)

内存查看

内存改写

 

今日例题:

1.能对改变变量值的操作只有++--=

2.看一个数组某一整型,某一个整型的某几位。

3.定义一个数组,数组里装的指针,指针指向函数,函数参数返回值为int

4.颠倒一个数组的元素,一个元素的某字节,一个字节的位。

 

 

Day2:主要讲函数值传递(一元二次方程根的求解 函数参数返回值 对象思想 结构体排序(有回调思想))

 

函数只有四种类型

1. Void fun (void)

2. Void fun (void*, ...)

3. Void* fun (void)

4. Void* fun (void*, ...)

 

参数:

直接传递:尽量用              揉起来传:只要能用尽量用。          装在塑料袋里传:禁止使用。

间接传递:传起始 地址 和长度         用结构体,则为万能传参。。

返回值:

揉在一起传 返回结构体  用数组(用全局变量,用static,用malloc

 

返回值是为了修改父函数中的某些空间,而return,则是用来返回函数执行的状态值。

 

回调:用指针调用函数。。C的灵魂;

 

函数直接,或间接调用自己,叫做递归。用递归是高手,或者写错。

 

面试题:求strlen

 

 

用指针调用函数叫做回调。

 

 

今日例题:

经验1:用递归函数返回值,可以取消一个变量的定义。

经验2:若要用函数改变父函数中的某些变量,参数里必须传递该变量的地址

1.取一个整型的某几位,置零一个整型的某几位,修改一个整型的某个字节。

2.将一个数组内所有整型复制给另个数组。。。用结构体复制。

3.函数参数传递

a) 直接整型数传递

b) 用结构体打包传递(传结构体名。。。穿结构体地址)

c) 用数组传递(传数组首地址与元素个数)

4.一个数组(内存)的显示(整型,字符型,字符串(给首地址即可),结构体(正常显示需正常匹配))

5.一个字节(内存)的显示(用移位取位,用数组,用结构体)

6.用函数求一个一元二次方程的根(day2/func_xx.c(用结构体打包输入输出,用return标识计算结果状态)

往一个函数的参数里穿地址可以传递在父函数中需要改变的值。

Return返回的应该是该函数执行状态

7.用函数交换两个整型,交换两个字符串,通用交换即(交换N个字节)

异或交换,可以不定义第三方变量

交换字符串时字符串的地址为char*,传进的地址需强转成int*,交换后再强转成char*

交换n个字节时,将n作为参数传入,在函数中循环n次交换。

 

Day3:主要讲习题及消化

函数的调用其实是( (*fun)( ) )只是可以省略,同时也可以用函数的指针调用(*p)();

p(); 即 回调。效果一样。

今日例题:

1.删除制定字符串

 

 

Day4:数据结构(链表的 增 删 改 查

 

Day5:软件与硬件的工作原理

 

 

---------------------------------------------------------------------------------------------------------------------

=====================================================================

数据结构:数据在内存中的存放形式

 

结构是无穷的,但是有很多经典的结构,就像建筑结构一样。

 

如下:表。List  栈。Stack  队。Queue  树.Tree  图gragh

 

这种限制是无法强制执行的,需要使用的人承认,并遵守其规则

物理结构 一看就知道的兄弟

逻辑结构 在银行必须排队,但并不是坐在最前面的就是最先服务的。。在如网订火车票

编程。看重的是逻辑。

 

物理长相不能说明逻辑长相。。。

 

 

数据结构与c没有太大关系。

 

节约时间,浪费空间。空间无限制。可任意插队。

顺序存储表。。链式存储表。。

 

今天要写,面向对象的程序了。任意一个操作对象都要有 增 删 改 查 的功能。。

图形界面程序都是面向对象的。在意的是有哪些功能,而与使用与否无关。做软件的人想的是尽可能的提供功能,而具体怎么使用不考虑。。

 

C可以写面向对象的程序,但比较蹩脚。。

 

Main函数体现过程。。子函数体现对象。

 

 

 

全局变量是最不应该出现的变量。。。如果是大数组,最好不要赋初值。。

 

对象的文件用单独的文件来做。

一定要告诉别人这个对象怎么用。增 删 改 查。Show

 

程序,就是数据结构+算法;;

 

 

 

 

 

硬件与软件的工作原理。

纸带打洞洞

磁带

光盘

 

进而发明了编程语言  汇编 2代表mov助记符

 

然后出现了c..

 

 

汇编语言的容量比c大。。。

C只能操作内存,汇编能操作寄存器。每一款cpu都有独立的汇编语言,因为他们的指令不同。寄存器不一样。一样就知识产权了。

 

就算都是arm的他的指令也是分版本的。需要指令集的修改,淘汰,增加。。。

对应的指令版本也有对应的编译器。。

指令集版本V5   硬件架构arm 4 6 7 8     a8a9

arm a9最好。便宜,能跑虚拟系统。   Cpu的架构一直保持arm架构,所以就叫arm不管怎么升级。。

 

Arm授权 苹果应该买到了所有的授权。

         三星买的二级黑盒,但接口是开放的,可以根据客户需要自己挂外围设备。。Gps等等。。

         

任意一个电子设备都有三个寄存器,控制寄存器,数据寄存器,状态寄存器

 

控制寄存器可以设置串口的波特率  数据存储器存放数据,状态寄存器标识串口传输状态

 

将电子设备的这些寄存器映射到内存时,就可以操作他们了。。

这种映射需要帮手,每买一个芯片他就会有资料s3cs10

控制外围设备,即找准并操作sfr area就可以了  gp 通用io口 arm有很多组io口,每一组都有三个寄存器。

 

 

 

 

 

 

 

 

 

原创粉丝点击