总结_LINUX.doc_第1页
总结_LINUX.doc_第2页
总结_LINUX.doc_第3页
总结_LINUX.doc_第4页
总结_LINUX.doc_第5页
已阅读5页,还剩528页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

当前文档中没有源。Error! Reference source not found.Error! Reference source not found.Error! Reference source not found.Error! Reference source not found.1111目录1. lesion 18 -review-C+简介、命名空间、结构、联合、枚举、布尔类型、内存分配、引用C+是强类型语言,对类型检查严格 C+比C更丰富:支持面向对象、支持泛型编程、支持异常、运算符重载等。使用g+编译器,扩展名是.cpp .cc .C等,不再使用c头文件,如果要 使用,可以c头文件名前加#include ,不再使用scanf/printf,而是cin/cout,标准C+头文件基本上不再使用.h结尾。所有标准的类、函数、变量、对象都在std的使命空间中。bool值本质上也是整数,可以将任何值赋值给bool类型的变量,以下4个值为false:0 0 NULL false ,其他一切值都视为true在C+中,函数的参数表严格匹配,空参代表没有任何参数,void 形参依然可以使用,函数不再使用C语言中的隐式声明方式,函数调用前必需先声明或定义。另外,函数的的返回类型int 不再省略。 2. lesion 19 引用的应用、类型转换运算符、成员指针、C+之父给C程序员的建议、面向对象编程、对象和类、构造函数const_cast(), 去掉cv 限定C+编程常见错误cannot have cv-qualifier/不能有CV限定,在C+中CV指const和volatile1、非成员函数不能有CV限定,2、静态成员函数不能有CV限定普通函数指针不能被赋值为成员函数的地址,即使返回类型和参数表完全匹配。因为成员函数有一个成员函数不具有的属性它的类。建议:1. 在C+中几乎不需要使用宏,用const 或enum定义明显的常量,用inline 避免函数调用的额外开销,用模板去刻画一族函数或类型,用namespace 去避免命名冲突。2.不要在你需要变量之前去声明,以保证你能立即对它进行初始化。3.不要用malloc,new 运算会做的更好4.避免使用void*、指针算术、联合和强制,大多数情况下,强制都是设计错误的指示器。5.尽量活用数组和C网络的字符串,标准库的string 和 vector 可以简化程序6.更加重要的是、试着将程序考虑为一组为类和对象表示的相互作用的概念,而不是一堆数据结构和一引起可以拨弄的二进制。C+标准库定义了大量的类,我们可以使用标准库中的类string构造对象,并调用其成员函数进行对象操作:= 、 += 、 + 、 = 间接5. lesion 22隐式类型转换和expilcit、new 和 delete 、封装、继承、多重继承、多态、纯虚函数和抽象类基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。派生类构造函数。作为一般规则 ,派生类构造函数应该不能直接向一个基类数据成员赋值,而是把值传递给适当的基类构造函数,否则,两个类的实现变成紧耦合,将更加难于正确地修改或扩展基类的实现。子类不会继承父类的构造函数、析构函数和赋值运算符函数。但是子类的这些可以调用父类的这些函数。6. lesion 23 动态绑定的底层实现、类型信息和类型转换、virtual析构函数、C+流及流类库、异常处理使用dynamic_cast指针或引用类型,当然只限制在父子类之间,而且是存在多态的情况下(即父类中存在虚函数)。实际上,在内存中为每一个数据流开辟一个内在缓冲区,用来存放流中的数据,C+的I/O流类库是用继承方法建立起来的一个输入输出类库,它具有两个平行类:即streambuf类和ios类,这两个类是基本类,所有流类都可以由它们派生出来。streambuf类提供对缓冲区的低级操作,如设置缓冲区,对缓冲区指针进行操作,从缓冲区取字符,向缓冲区存储字符,它有三个派出类,即:filebuf,strstreambuf,和conbuf,其成员函数大多采用内置函数方式定义,以提高效率。lesion 28 lesion 29 lesion 30 7. lesion 37 Unix/Linux操作系统介绍,Linux简介及特点、GNU编译工具,预处理,静态库、共享库,UNIX操作系统,是美国AT&T公司于1971年在PDP-11上运行的操作系统。具有多用户、多任务的特点,支持多种处理器架构,最早由肯-汤普逊-丹尼斯-里奇和Douglas Mcllroy于1969年在AT&T的贝尔实验室开发。Unix系统的三大派生版本System V : AIX、Solaris、HP-UX、IRIXBerkley: FreeBSD、NetBSD、OpenBSD、Mac OS XHybird:Minix、LinuxGNU Project由Richard Stallman 发起开始于1984年,由自由软件基金(FSF :Free Software Foundation)支持。GNU的基本原则是共享。通用公共许可证(GPL)Linux发行版本 大众的Ubuntu 优雅的Linux Mint 锐意的Fedora 华丽的openSUSE 自由的Debian 简洁的Slackware 老牌的RedHat8. lesion 38 库工具介绍、错误处理异常方式、GNU C简介 内存管理库工具介绍strip ch01_1.o libmyku.a 去除指定文件与静态库中的调试信息ldd libmyku.so 列出共享库的依赖关系异常处理根据全局变量errno得到异常编号 ,errno 在函数调用正确时不修改,绝对不要通过errno判定错误把error转换成字符串 ,strerror 、perror() 、 printf(%m);GNU简介gcc(GNU cc)是一个功能非常强大的跨平台c编译器它对标准C(ansi/iso c)进行了很多扩展,这些扩展对优化目标代码布局、安全性检测方面提供很强的支持,我们把支持GNU扩展的C语言称为GNU C。Linux内核代码使用了大量的GUN C扩展,以至于唯一能够编译Linux内核的编译器就是gcc.GNU C扩展的一些特殊之处允许零长度数组、case 范围、把复合语句当成表达式、typeof、可变参数的宏、标号元素、attriblute、函数属性9. lesion 39 虚拟内存技术、物理内存管理、系统底层内存映射、系统调用 、文件操作void* sbrk(int size) 适于分配空间、返回分配前的位置size=0 返回当前位置 ; size0 分配内存空间,size 0 释放空间int brk(void* pos) 直接修改分配地址的末地址。0: 分配成功 -1 失败getpagesize() 可以得到内存页的大小 ,一般为4k void*mmap(void* start, size_t length, int prot, int flag , int fd , off_t offset );int munmap(void* start , size_t lengt);错误代码: - EBADF 参数fd 不是有效的文件描述符- EACCES 存取权限有误- EINVAL 参数start、length 或offset 有一个不合法- EAGAIN 文件被锁住 ,或是有太多内存被锁住- ENOMEM 内存不足Linux环境中的文件具有特别重要的意义,因为它们为操作系统服务和设备提供了一个简单而统一的接口。在Linux中,一切(或几乎一切)都是文件。Linux 中的任何事物都歌谣和一个文件代表,或者可以通过特殊的文件进行操作。一些特殊文件 - 目录 -设备文件- /dev/console - /dev/tty -/dev/nul文件处理函数 -open 打开或创建一个文件 - creat 建立一个空文件 - close 关闭一个文件 - read/write 读/写入一个数据 - lseek -unlink 删除文件一个的硬连接 -remove 删除文件本身 - fcntl 控制一个文件属性文件描述符1. 值为一个非负整数 2. 用于表示一个打开的文件3. 在内核空间被引用,并且由系统调用 (open )所创建4. 内核缺少打开三个文件描述 0-标准输入 1-标准输出 2-标准错误5. unistd.h 中0,1,2应当替换为STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO6. 文件描述符的变化范围是0OPEN_MAX .OPEN_MAX有可能是63,Linux允许更大的值 int open(const char*pathname, int flag); int open(const char* pathname, int flags, mode_t mode);int creat(const char* pathname,mode_t mode); #include 以下三个常量同样是选用的,它们用于同步输入输出。1. O_DSYNC 等待物理I/O结束后再write. 在不影响读取新写入数据的前提下,不等待文件属性更新。2. O_RSYNC read 等待所有写入同一区域的写操作完成后再进行3. O_SYNC 等物理I/O结束后再write ,包括更新文件属性的I/Oopen 返回的文件描述符一定是最小的未被使用的描述符一个进行同时打开的文件个数是有限的,这个限制通常由limits.h头文件中的常量 OPEN_MAX决定。POSIX 要求最少16 通常被设置成256ssize_t write(int fd,const void *buf , size_t nbytes); #include ssize_t read(int fd, void* buf, size_t nbytes); #include 返回值 :读取到的字节数:0 结束 -1 出错read 函数 从fd指定的已打开文件中读取nbytes 字节 到buf 。以下几种情况会导致读取到字节数小于nbytes;1. 读取普通文件时,读到文件末尾还不够nbytes 字节 2. 从终端设备(terminal device )读取时,一般情况下每次只能读一行。3. 从网络读取时,网络缓存可能导致读取的字节数小于 nbytes 字节4. 读取pipe 或者 FIFO时,pipe 或FIFO 里字节数可能小于nbytes.5. 从面向记录(record-oriendted)的设备读取时,某些面向记录设备(如磁盘)每次最多只能返回一个记录6. 在读取部分数据时被信号中断close 调用终止一个文件描述符fd 与其对应文件之间的关联,文件描述符被释放并能够重新使用。close 成功就返回0 ,出错就返回 -1 有时检查close 调用的返回结果十分重要 。有的文件系统,特别是网络文件系统,可能不会在关闭文件之前报告文件写操作中出现的错误,因为执行写操作时,数据未被确认写入。关闭一个文件时会释放该进程加在文件上的所有记录锁。当一个进程终止,内核自动关闭它所有打开的文件。lssek函数每个打开的文件都有一个与其相关的“当前文件偏移量”偏移量通常是一个非负整数,用以度量从文件开始处计算的字节数读、写操作都从当前文件偏移量处开始,并例偏移量增加所读写的字节数该函数仅将当前的文件偏移量记录在内核中,它并不会引起任何I/O操作。文件偏移量可以大于文件的当前长度,对该文件下一次读写会加长该文件,并形成文件空洞,这个是允许的。文件空洞并不要求在磁盘上占用存储区,但对于新写的数据需要分配磁盘块。大多数磁盘I/O都通过缓冲进行,写入文件时先写入缓冲区,如果缓冲区未满,则不将其排入输出队列,这种方式叫做延迟写延迟写减少了磁盘写次数 ,但降低了文件内容更新速度。sync, fsync, fdatasync 这三个函数可以保证缓冲区和实际文件系统的数据一致。sync 将所有修改过的缓冲区排入写队列,然后就返回,并不等实际写磁盘。fsync 只对一个文件,并且等实际写磁盘完成才返回fdatesync 只更新数据,不更新文件属性。10. lesion 40 文件操作、sys/stat.h 、文件权限、文件连接 、 目录的创建和使用。sys/stat.h 中的文件类型宏函数 S_ISREG 普通文件 S_ISDIR 目录文件S_ISCHR() 字符特殊文件 S_ISBLK 块特殊文件S_ISFIFO 管道文件 S_ISLNK()符号链接S_ISSOCK 套接字返回值和一些错误代码返回值 :执行成功返回在0,失败返回-1 ,错误代码在于errno错误代码: -ENOENT 参数file_name 指写的文件存在。 - ENOTDIR 路径中的目录存在但非真正的目录。 - ELOOP 欲打开的文件有过多符号连接问题,上限为16符号连接 - EFAULT 参数buf为无效指针,指向无法存在的内存空间 -EACCESS 存取文件时被拒绝 -ENOMEM 核心内存不足 - ENAMETOOLONG 参数file_name 路径名称太长access 函数按实际用户ID和实际组ID进行访问权限测试。测试成功返回0,失败返回-1R_OK 测试读权限 W_OK 写权限X_OK 执行权限 F_OK文件是否存在11. lesion 41 进程的控制、进程的查看和fork函数、waitpid函数和exec函数、信号的处理和信号的中断12. lesion 33 new-13. lesion Linux 基础知识 2013.10.21(1) 程序员的方向:1、互联网、物联网服务器端2、嵌入式开发3、移动终端4、PC端应用程序Java是由sun公司于1995年开发的,2009年4月20日sun微系统公司被甲骨文(oracle)收购,是世界上最大的企业软件公司,向遍及145个国家的用户提供数据库、工具和应用软件有相关咨询、培训和支持服务,甲胄文公司于1989年正式进入中国。IBM为计算机产业长期的领导者,还在大型机、超级计算机,UNIX,服务器方面领先业界。google目前被公认为全球规模最大的搜索引擎,它提供了简单易用的免费的服务。2008年推出Android,是用Java编写。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备、如智能手机和平板电脑,由Google和开放手机联盟(三星、HTC、华为、索爱)领导及开发。Adroid操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google由收购注资。2012年市场:Android 70% IOS20% 其它B-SRIAC-S架构(web 1.0):能解决地域限制,但升级麻烦。只能在网上进行阅读。B-S架构(web 2.0):浏览器和服务器结构,升级比较容易,但所有的代码都在服务器端,使服务器端压力大。可以进行阅读并进行上传。服务器的要求:1、安全性好,2、稳定性好、3计算效率高。兼容性更好,可以打开excel等文件。因为服务大多为Linux、Unix系统。张晨:1876861807 QQ:2353981924(2) 操作系统操作系统kernel 和shell、Lunix文件系统、常用的shell命令Linux是一个区别于windows的操作系统Linux是一个多用户的操作系统Linux系统通过账号区分不同的用户Solaris 是sun公司的研发的,被认为是UNIX系统的衍生版本之一。操作系统可以分为kernel 和 shell, 其中kernel是操作系统内核的意思操作系统的内核是大多数操作系统的核心部分,它由操作系统中存储器、文件、外设和系统资源组成。操作系统内核通常运行进程,并提供进程之间的通信(IPC)机制。shell 俗称外壳,是指提供使用界面的软件。同时它又是一种程序设计语言。(有空的时候可以学习一下)Linux:文件系统是操作系统用于在磁盘或分区上的组织文件的方法和数据结构。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需的数据结构。查看用户信息文件 : more /etc/passwd查看用户密码文件 : more /etc/shadow (普通用户没有权限)查看用户组的配置文件 ; more /etc/group(3) Linux常用命令:vi的操作模式分为三种:命令模式(command mode)底行命令模式(last-line mode)文本编辑模式(entry mode)Comman底行命令模式命令模式:按键:/? d Mode,作为枢纽,进行转换命令模式底行命令模式:按键:/ ?命令模式编辑模式:a或i或o /a 光标向后移动一个字符 i光标在当前位置 o在下面插入一行,光标并下移vi + filemane: 文件存在就打开,不存在就创建并打开:w 是保存:wq 保存并限出(或ZZ,或:x) :q! 强行退出,不保存移动光标:在远程登录UNIX操作系统,只能用下列方式k 向上j 向下h 向左i 向右在命令模式下:r 替换一个字符 /rs 直接把当前字符换成scw 替换一个单词 /光标放在单词首字母上,输入命令,自动删除该单词,自己cc 替换一行c 替换从光标到行尾nyy:复制 np:粘贴 ndd:删除行通配任意多个任意字符 *通配一个任意字符 ?x 删除一个字符dw 删除当前词3dw 删除三个词dd 删除一行5dd 删除五行 改变大小写 j 将当前行和下一行连起来u 撤消刚才的操作:set nu显示行代码:21光标停在指定行21G 光标停在指定行(G 到文件尾 1G到文件头)a 在光标位置的下一个字符进行插入i 在当前光标位置插入o 在光标位置的下一行插入一行:set foldcolunm=5; 左距(4) GCC常用命令:gcc处理理C语言时,分为四个阶段1、预处理 针对指令2、编译 狭义的编译,语法的检测等。3、汇编 从高级语言汇编语言机器语言、4、连接 把用来的各种资源打包到一起注:通常讲的编译是广义的,包括预处理,编译和汇编,生成.o(目标文件)gcc 的选项v 查看编译器的版本E 只执行预处理,不做其他的(o xx. i)S 生成汇编文件c 只编译不连接o 改变目标文件名(各种类型)Wall 显示更多的告警1.pwd显示当前位置2.ls:显示当前文件夹下的内容,ls a 显示所有的内容,包括隐藏的文件夹(以点开头) ls l 显示文件的详细内容 ls l | wc l 文件的个数 ls /etc l | grep d | wc l 以d开头的文件的个数 ls l 第一段:文件类型,“d”目录 ;“.”普通文件 ; “|”链接文件第二段:拥有者的访问权限 , 用“u”表示 r 读;w 写 ;x 执行 第三段:同组者对该文件的讯问权限 ,用“g”表示 第四段:其他人对该文件的访问权限 ,用“o”表示; 所有用户用“a”表示 修改权限:chmod u/g/o/a=/+/-r/w/x +表示增加权限 -表示减去权限 =表示最终权限 eg:chmod 644 a.txt 4代表读取权限 2 代表写入权限, 1 代表执行权限, 3.mkdir:创建一个文件夹 mkdir 如果目录不存在,则自动创建 mkdir a/b/test.c4.cd 进行某个目录,可以是相对路径,也是绝对路径。cd /根目录; cd .上级目录; cd 用户主目录5.clear 清屏6.cd . 返回上一层目录7.touch 创建文件8.mv+文件名+目标路径 移动后文件9.cp+目录+文件名+目标路径 复制文件到指定路径 cpp +原文件名+目标文件名10.rm+文件名 删除文件 ; rmdir :删除空目录 ; rm r:可以删除目录(包括非空目录)11.cat/more 显示文件的内容,其中more可以分屏显示; 按q退出cat b.txt 把a.txt 中的内容,复制到b.txt中。echo hello a.txt把内容写入到一个文件中echo a nice day! a.txt 追加内容 head和tail 可以查看的开关n行和结尾n行 eg:head -5 /查看前5行的内容12.vi +文件名 进入某个文件,如果没有则创建。文档有两种状态,进入文件时是命令状态,通过点击a或i或o,进行到编辑状态。 13. ln 创建硬连接 ln a.txt b;ln s 创建软连接 ln s a.txt c区别:删除a.txt后,可以能过硬连接b可以继续访问,也软连接c将无法访问。14.find:查找文件 eg:find /etc name pass* -name 按名称查找 -perm 按照权限查找 -user 按照文件的属主来查找 -group 按照文件所属的组来查找15.grep 内容查找命令 eg:grep root /etc/passwd /查找有关root的内容-n 同时显示匹配行上下的n行-c 只打印匹配的行数-i 忽略大小写差别16. gcc E 预处理gcc c 只编译,生成.o为后缀的目标文件gcc o output_filename,输出的文件名为output_filename,不能和源文件名相同,如果不给这个选项,gcc就给出可执行文件a.outgcc g 产生符号调测工具所必要的资讯。-0 对程序进行优化编译、连接、采用这个选项会在编译、连接过程中进行优化处理。-S 编译成汇编 xxx.s17、ps 查看进程 -a 列出所有进程 -w 加宽显示,可以显示较多的资讯 -au 显示较详细的资讯 -aux 显示包含其它使用者的进程18. kill 可以终止一个进程-s 可以改善信号19.su 切换用户20. passwd 修改密码 21.| 将一个命令的输出作为下一个命令的输入 ls l/etc|more22.命令分隔符 分号; 在同命令行中分隔多条命令。23.cal;显示日历 date:显示 当前的时间24.续行符() 继续在下一行输入命令标准C:2013.10.22 2013.10.23 2013.10.241. C语言的发展C语言由贝尔实验室肯尼斯.蓝.汤姆逊和丹尼斯.里奇(C语言之父)等人开发UNIX操作系统的附加成果。B语言New B(后改名为C语言)C+语言:包含所有C语言的特性,增加了类和其他特性支持面向对象编程。Java:基于C+,也包含了一些C的特性。C#:是由Java和C+发展起来的perl:脚本语言。Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN2. 数据类型(1) 数组数组成员赋初值给数据的每10项,第20项,第30项赋一个数据int30=19=23,9=45,29=78; /可以不考虑顺序数组可以有任意的维数。例如声明二维数组:a34;二维数组的初始化:a34=0;我们可以把二组数组看成由行和列组的矩阵行下标:可以用来索引相对应的元素在二维数组的哪一行列下标:可以用来索引相对应的元素在二维数组的哪一列虽然我们是以行和列来显示二维数组的,但实际上他们在内存却不是这样存储的C语言是按照行主序存储数据的,多维数组一样如此。c99中的变长数组int n;scanf(“%d”,&n); /注意语句顺序int an; /c99 变长数组(2) 指针指针:就是内存,指针变量就是存储地址的变量1) 指针与数组*(a+i) *(i+a)访问与数组: ai ia *(a+i)*q+ 可以遍历数组 /数组名不可以这使用,数组名是常量指针数组和数组指针指针数组本质上就是数组,数组中的每一个元素都是指针。 int *q5;数组指针指向数组的指针,步进值是整个数组所占用的字节数 int (*p)10;int a 34;int(*q)4;q=&(a0);q(0):a00q(1):a10q(2):a20place(const snake*p) /表示p指针指向的数据不能改变place(snake * const p) /表示p内存储的地址不能改变2) 空指针和悬空指针、二级指针、函数指针悬空指针(Dangling Pointer)指的是:一个指针的指向对象已被删除函数指针用来和函数配对(记录函数地址)可以使用函数指针调用函数函数名称可以用来表示函数地址/* 函数指针练习 */#include int add(int x,int y)return x+y;int main()int (*p_func)(int,int)=NULL;p_func=add;printf(“p_func(4,9)是%dn”,p_func(4,9);printf(“p_func(4,9)是%dn”,(*p_func)(4,9); /以上两种效果一样return 0;(3) 字符串1) 字符串的表示形式C语言中,没有string类型三种表示形式:1.”abcef”字面值常量,后面通常以0结束 /存在于全局区,不可以改变,字面值相同的字符串在内存中只有一个2.数组:char arr表示字符串类型的变量,后面一定要加上0 /存在于内存中函数栈,可以这样赋值:str6=”abcde”;3.指针:字符串是以0为结束 2) 字符串的操作字符串的读取1.scanf(“%s”,&name);2.gets(name); /人输入设备中读一行字符放到name中,危险:不会考虑溢出3.fgets(name,20,stdin);字符串的其它操作1.char *strcpy(char*dest,char*src) /将src拷贝到dest中。2.char*strcat(char*dest,char*src) ; /将src中的字符连接到dest的尾巴中。3.strncpy/strncat /保证缓冲区不会溢出4.int strlen;测量字符的长度(个数),不包含05.int strcmp(char*s1,char*s2);:对比两个字符串 /相等返回0,s1s2 返回正值 s1操作符表示结构体变量内部的子变量。(5) 联合 联合可以让多个变量占据同一块内存空间。#include typedef unionchar arr2;int num; un;int main()un=un1;printf(“sizeof(un) is %d ,”); /输出为:sizeof(un) is 4return 0;(6) 枚举类型枚举类型可以用来把多个相关的概念转换成数字,使用枚举类型实现转换时,转换好的数字是由计算机决定的。计算机给每个概念规定一个对应的整数。枚举类型使用关键字enum 声明。 /enum (SPR, SUM, AUT, WIN);#include int main()enum(SPR,SUM,AUT,WIN); /可以把SUM改成SUM=10,这样后边会产生相应的变化,如:AUT会变成11printf(“AUT是%d”,AUT); /结果是:AUT是2return 0;sizeof()关键字1.给出数据所占的字节数,如果()中给出的数据,可以返回给定的数据所占用字节数。 sizeof(char)=1 sizeof(2)=42.sizeof()不会对括号中的表达式进行运算int a=2;printf(“%dn”,sizeof(a+);3.如果sizeof()括号里的表达式是不同类型的变量,则会按照所占字节数最大的类型进行返回(类型之间存在隐性转换)。sizeof(3+0.8)=8char str=”hello”; sizeof(str)=6 /0占用一个字节char *p=str; sizeof(p)=4 /在32位的操作系统中,指针的大小始终是4void fun(char str100)sizeof(str)=4 /形参中的数组传递的是数组首地址,相当指针。void *p=malloc(100); sizeof(p)=4 /malloc申请100字节的内存,返回是指向内存的首地址。char str100=”nihao”; sizeof(str)=100; strlen(str)=5; /取有效的个数,不包括0。在Windows下计算结构体的大小:double,按8个字节算,不再按4个字节进行计算3. 变量(1) 变量的生命周期 局部变量:在函数体里声明的变量叫做局部变量 生命周期:从定义这个变量到函数结束 作用域:定义这个局部变量的函数内(定义这个变量以下的语句)静态局部变量:static修饰的局部变量:和局部变量一样,不同的是,静态局部变量的值是上一次函数调用的结果,即再次调用时,忽略定义时进行的初始化句,但也可以在下面的地方进行修改其值。全局变量:定义在整个程序中的变量 生命周期:整个程序的生命周期之内 作用域:整个的程序的范围 特点:维护起来困难,排错困难,代码利用困难全局变量:如果在一个程序中使用全局变量,只需在其中一个.c文件中定义,其余的.c文件只要声明一下:extern int val;但静态全局变量不可以被其它文件中的语句使用。局部变量在没有初始化时是一个随机数,而全部变量在没有初始化时,数值是0;块变量:定义在语句块里的变量叫做块变量 生命周期:定义变量开始的地方,程序块结束的地方消失 作用域:程序块内程序块:使用、括起来的一组语句。变量的局部优先原则,局部变量与块变量同名,在块变量作用范围内,使用块变量(2) 修饰变量的关键字auto 自动变量:普通变量(除static外)都是auto,一般情况都是省略的static 静态局部变量:就是上次调用之后的数值 静态全局变量:只能在本文件中使用这个全局变量 /静态函数:只能在本文件中使用使用该函数.register:寄存器变量 /这个变量会被频繁使用,请保存到寄存器中。 使用限制: 1.必须被CPU的寄存器接受(32位) 2.不能对寄存器变量取地址 3.有些系统并不会把寄存器变量放到寄存器中,由系统决定volatile:告诉编译器这个变

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论