摘要: 一 面向对象(oop)1.封装2.继承基类---->派生类3.多态:派生类中可能出现与基类同名的方法。针对基类与派生类同名的方法,派生类要有自己的行为,必须要覆盖基类的方法。二 虚函数virtual funname(。。) // 基类允许实现该方法纯虚函数:virtual funname()=0 //基类不存在对该方法的实现。一个类中包含了一个纯虚函数,那么该类叫抽象类。 抽象类不能实例该类的对象。如果派生类也没有去实现基类中的纯虚函数,那么该派生类也是一个抽象类。三 多态(override)要和函数的重载(overload)区分1.多态是在存在继承关系的类中,看是否有相同的方法。2.重 阅读全文
posted @ 2011-09-19 15:07 auleaf 阅读(221) 评论(0) 推荐(0)
摘要: 对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而且char*="aaa"的写法现在不被提倡,应予以避免。strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。int *p=NULL, sizeof(*p) = sizeof(int) = 4,是说整型数占用几个字节。某32位系统下, C++程序,请计算sizeof 的值#include <stdio.h>#include <mallo 阅读全文
posted @ 2011-09-19 15:01 auleaf 阅读(223) 评论(0) 推荐(0)
摘要: #include<stdio.h>int main(void){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1); //&a代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。printf("%d %d\n",*(a+1),*(ptr-1));//a代表数组首元素的地址,+1应该加上sizeof(a[0]),所以a+1指向a[1]处。return 0; //输出是 2 5 } 对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T的指针 阅读全文
posted @ 2011-09-19 15:00 auleaf 阅读(8143) 评论(0) 推荐(2)
摘要: 在send()发送数据的时候出现下面这个错误send() error.: Socket operation on non-socket已导致不能发送错误,虽然这个错误时出现在send()调用,但是其错误源头在accept()调用,我调试时,打印了accept()返回值居然是0,mygod……原因:在accept()调用的时候出现了。运算符优先级错误。汗……一个低级错误,郁闷了我昨天一个下午。原函数错误写法是:if(connectfd = accept(listenfd,(struct sockaddr*)&client,&sin_size)==-1){ perror(" 阅读全文
posted @ 2011-09-19 14:54 auleaf 阅读(8443) 评论(0) 推荐(1)
摘要: 本文出自:http://www.china-pub.com作者:姚继锋(2001-08-1109:05:00)1引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用多线程的理由之一是... 阅读全文
posted @ 2011-09-19 14:51 auleaf 阅读(4179) 评论(0) 推荐(0)
摘要: int quickOnce(int * data, int left, int right){int tmp;tmp = data[left];while(left<right){//右边找个小于tmp的数放到左边while(left<right){if(data[right] < tmp){data[left] = data[right];break;}right--;}//左边找个大于tmp的数放到右边while(left<right){if(data[left] > tmp){data[right] = data[left];break;}left++;}} 阅读全文
posted @ 2011-09-19 09:45 auleaf 阅读(178) 评论(0) 推荐(0)
摘要: 静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。静态局部变量定义: 在局部变量的说明前再加上static说明符就构成静态局部变量。 例如: static int a,b; static float array[5]... 阅读全文
posted @ 2011-09-19 09:43 auleaf 阅读(831) 评论(0) 推荐(1)
摘要: 1。函数的形参列于函数声明中,在函数定义的函数体内使用。当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。 2。实参是用来填充形参的。当函数被调用时,实参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。 3。传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上 阅读全文
posted @ 2011-09-19 09:38 auleaf 阅读(2154) 评论(0) 推荐(0)
摘要: C和C++是两件截然不同的东西,学习C++可以完全没有C的基础,或者说可以完全不用先学C;但是,这样你是永远也不可能成为真正的C++大师的;你最多只能成为一个C++的熟练工人;C和C++有一个共同的奥义:内存管理,而你不学习C,单从对C++的理解是不可能掌握这项最伟大的技术的; C++是面向对象的,C不是,它的特点是结构化程序设计思想,或者说是面向过程的;而C++在语法上以C的语法为基础,兼容C的语法,这让它看上去有点凌乱;甚至C的程序不需要任何改动就可以用C++的编译器编译;对于已经掌握C语法的人,学习C++比学习其它语言(如Delphi)要觉得容易些;而对于资深的C程序大师,那么学习C++ 阅读全文
posted @ 2011-09-19 09:37 auleaf 阅读(1869) 评论(0) 推荐(0)
摘要: #include<stdio.h>voidmain(){inti;for(i=0,printf("first=%d\n",i);i<10,printf("second=%d\n",i);i++,printf("third=%d\n",i)){printf("forth=%d\n",i);}}这段代码会无限循环下去,因为中间的条件是个逗号表达式,逗号表达式的值是最后一个表达式的值。c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程 阅读全文
posted @ 2011-09-19 09:32 auleaf 阅读(1513) 评论(0) 推荐(0)
摘要: 1. pipe系统调用的使用格式#include<unistd.h>int pipe(int fd[2])功能:创建一个简单的管道,若成功则为数组fd分配两个文件描述符,其中fd[0]用于读取管道,fdp[1]用于写入管道。返回值:成功返回0,失败返回-1。2. 命名管道:mkfifo系统调用的使用格式:#include<sys/types.h>#include<sys/stat.h>功能:创建命名管道返回:若成功则为0,若出错则为-1.3.信号量:semget()系统调用的使用格式:#include<sys/sem.h>功能:创建一个新的信号量 阅读全文
posted @ 2011-09-19 09:29 auleaf 阅读(605) 评论(0) 推荐(0)
摘要: 并行性包含同时性和并发性,前者是指两个或多个事件在同一时刻发生,后者是指两个或多个事件在同一时间段内发生。 计算机操作系统中把并行性和并发性明显区分开,主要是从微观的角度来说的,具体是指进程的并行性(多处理机的情况下,多个进程同时运行)和并发性(单处理机的情况下,多个进程在同一时间间隔运行的)。 计算机组成原理主要是从宏观的角度来看的,并发性在用户看来也是并行的,故并行性包含了并发性的。主要是看问题的角度和层面不同的。 阅读全文
posted @ 2011-09-19 09:22 auleaf 阅读(5821) 评论(0) 推荐(1)
摘要: 01#include <stdio.h> 02#include <stdlib.h> 03#include <fcntl.h> 04#include <unistd.h> 05#include <string.h> 06#include <sys/types.h> 070809#define FILE_TXT "sf.txt" 10#define FILE_BIN "sf.bin" 1112typedef struct student 13{ 14int id; 15char nam 阅读全文
posted @ 2011-09-19 09:20 auleaf 阅读(150) 评论(0) 推荐(0)
摘要: 1 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段,代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径, 它们共享一个进程的资源。 2 同一个进程中的线程的共性:多个线程将共享同一个进程虚拟空间。 线程共享的环境包括:进程代码段,进程的公有数据(利用这些共享的数据,线程很容易实现相互之间的通讯),进程打开的文件描述符,信号的处理器,进程的当前目录和进程用户ID与进程组ID。 3 线程的个性: 线程ID:每个线程都有自己的线程ID,这个ID在本进程中是唯一的。 寄存器组的值:一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存 阅读全文
posted @ 2011-09-19 09:20 auleaf 阅读(176) 评论(0) 推荐(0)
摘要: 01#include<stdio.h> 02int main() 03{ 04int a[5][5]={1,3,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; 05int (*p)[5]; //p是一个数组指针,它指向一个数组,这个数组里面有5个元素。 06p=a; // p是指向a[0][5]这个小数组的首地址,不是指向a[0][0]这个元素的首地址,所以p+1表示a[1][5]这个小数组的首地址 07printf("%d\n",**(p+1)); // 6 08printf(&q 阅读全文
posted @ 2011-09-19 09:04 auleaf 阅读(208) 评论(0) 推荐(0)
摘要: 1 简单地说,shell就是命令解析器,将用户输入的指令转换为相应的机器能够运行的程序。 2 Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面。 Shell除了作为命令解释程序以外,还是一种高级程序设计语言。利用Shell程序设计语言可以编写出功能很强、但代码简单的程序。 3 shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行。 4 Shell过程的建立和执行 称作Shell文件或者Shell脚本(Shell script)。 建立Shell过程的步骤同建立普通文本文件相同,利用编辑器(如vi或gedit)进行程序. 阅读全文
posted @ 2011-09-19 09:03 auleaf 阅读(233) 评论(0) 推荐(0)
摘要: ; 数据块拷贝; AREA cpData, DATA, READWRITE align 4 ;四字节对齐buf1 space 12345 align 4 ;四字节对齐buf2 space 12345 AREA cpCode, CODE, READONLY ENTRYstart ;初始化测试数据 ldr r0, =12345-1 ldr r1, =buf1initloop strb r0, [r1, r0] subs r0, r0, #1 bne initloop ;数据拷贝 ldr r0, =12345 ;计数器 ldr r1, =buf1 ;源缓冲区 ldr r2, =buf2 ;目的缓冲区 阅读全文
posted @ 2011-09-19 09:00 auleaf 阅读(384) 评论(0) 推荐(0)
摘要: 这种指令用于把单一的数 传入或者传出一个寄存器。支持的数据类型有字(32 位 ) 、半字(16 位) 和字节。常用的单寄存器加载与存储指令包括: LDR/STR 字数据加载/ 存储指令 LDRB/STRB 字节数据加载/ 存储指令 LDRH/STRH 半字数据加载/ 存储指令 LDRSB/LDRSH 有符号数字节/ 半字加载指令 ( 注意:没有strsb/strsh 指令) 1. 汇编格式 : LDR{<cond>}{T} Rd ,addr 功能: LDR 指令用于从存储器中将一个 32 位的字数据加载到目的寄存器 Rd 中。该指令通常用于从存储器中读取32 位的字数据到通用寄存器 阅读全文
posted @ 2011-09-19 08:59 auleaf 阅读(914) 评论(0) 推荐(0)
摘要: 01; 02; 1-2+3-4+5...+99-100 03; 0405AREA sum2Code, CODE, READONLY 06ENTRY 07start 0809mov r0, #0 ;保存结果 10mov r1, #1 ;循环计数器 11sum2loop ;特点奇数加偶数减 12tst r1, #1 ;测试奇偶性 13addne r0, r0, r1 ;加奇数 14subeq r0, r0, r1 ;减偶数 15add r1, r1, #1 16cmp r1, #101 17bmi sum2loop 181920stop 21mov r0, #0x18 22ldr r1, =0.. 阅读全文
posted @ 2011-09-19 08:58 auleaf 阅读(366) 评论(0) 推荐(0)
摘要: ARM 处理器是加载/ 存储体系结构的处理器,对存储器的访问只能通过加载和存储指令实现。 1. 数据加载与存储的方向问题 数据加载与存储( Load-store )指令用于在存储器和处理器的寄存器之间传送数据。 数据加载与存储指令共有三种类型:单寄存器加载与存储指令、多寄存器加载与存储指令和交换指令。 2. 数据加载与存储指令的寻址 数据加载与存储类指令的基本格式为 opcode{<cond>} Rd ,addr 。格式中opcode 为指令代码,如 LDR 表示将存储器中的数据加载到寄存器中。addr 为存储器的地址表达式,也称为第2操作数,可表示为 [Rn,offset... 阅读全文
posted @ 2011-09-19 08:58 auleaf 阅读(2210) 评论(0) 推荐(0)