C语言高级编程学习笔记总汇.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言高级编程2015年2月4日16:09?常用ubuntu命令cat xxx查看文本内容file xxx查看文件类型touch xxx创建一个文件su切换超级用户sudo借用超级用户权限gedit xxx 打开并编辑一个文件,没有会创建,不占用命令行命令 --help命令帮助man 命令命令帮助,可用于函数Tab键自动补全命令 Tab Tab命令自动补全whereis ls查看ls命令路径?printf(%p,a);//打印变量a的地址???内存结构32位系统下每个运行的程序系统都会为其分配4G的(虚拟)内存空间。内存大小用途说明1GKernel内核空间?xx环境变量和命令行参数?xx栈用于存放局部变量、函数形参。由操作系统分配、释放。向下生长xx堆用malloc()申请堆空间,用free()释放堆空间。由程序员分配、释放。向上生长。xxbss静态区。bss存放未初始化的变量,自动赋值为0。静态区变量生命周期从编译开始到程序运行结束。xxdata静态区。data存放初始化过的变量。静态区变量生命周期从编译开始到程序运行结束。xx字符串常量区只读。printf(Hello World);xx代码段存放指令。只读。???编译四步骤预处理编译汇编链接替换头文件将C转换为汇编将汇编语言转换为机器代码链接函数??数据类型告诉CPU如何读写内存。基本数据类型:char,short,int,long,float,double......构造数据类型:数组,结构体,联合体。指针类型:空类型:void?C语言中数据类型的字节长度???局部变量生命周期从定义开始到函数结束,作用域在当前函数模块内。全局变量生命周期从编译开始到程序运行结束。作用域在变量定义之下。全局变量的内存地址在编译的时候就已经确定,所以无论程序运行多少次全局变量的地址都不会改变。全部变量和局部变量重名的话全局变量就会被屏蔽。??static作用:用于声明一个静态变量。不初始化存储在bass区并且自动赋值为0,初始化过的存储在data区。生命周期:从编译开始到程序运行结束。作用域:static修饰的局部变量,作用域在局部。static修饰的全局变量,作用域在定义之下,可见域在当前文件中。static修饰的变量外部文件无法调用。static修饰函数用于隐藏该函数,函数可见域只在当前文件内。??extern引用外部变量。??const声明一个只读变量。??指针int * p;指针的值:p为指针变量,用来存储地址。p的值为指向的空间的地址值。指针的类型:int *为p的类型(所有的指针类型都占4个字节,char *也占用4个字节)。指针指向的类型:int为指针指向的空间的数据类型。指针指向的值:*p为指针指向的值,指针指向的空间的间接引用(别名)。?指针的赋值:要操作指针必须给指针一个合法的指向。指针初始化:char *p=NULL;强制类型转换:char *p = NULL;int a = 258;p = (char *)a;*p = 2;//溢出//cha *类型指针只能指向char类型空间地址,如果要操作其他类型空间需要强制类型转换。char *类型指针只能操作char类型空间,就是一个字节的空间。任何数据类型之间都可以强制类型转换,指针之间不会隐式转换。类型不匹配不能进行运算或赋值。强制类型转换仅仅是在运算过程中有效,并没有改变变量或者地址的类型。?赋值的规则:类型匹配。int a;int *p=a;int **q=p;?指针的运算:int *p;int *q;p*q,p/q,p+q;//无意义。指针乘法,除法,加法无意义。p-q;//求p和q之间相差几个数据类型空间。?指针偏移:指针加n,偏移为n个指向的空间类型大小。int *p;char *q;p++;//偏移4个字节q++;//偏移1个字节?指针与数组:指针与数组用法上面的差别仅仅在于指针为变量,数组名为常量。通常用指针指向数组是指向数组的首元素,便于操作。?int a[10];int *p=a;//a == a[0]int (*q)[]=a;等价关系:p == a ==a[0]*(p+n) == *(a+n) ==a[n] ==p[n] ==(*q)[n] ==*(*q+n)?int *p;int a[10]={1,2,3,4,5,6,7,8,9,0};//p和a都为指针,但是p为(int *型,4个字节)指针变量,a为(int [10]型,40个字节)指针常量。p=a[0];*p == *a; //a为a[0]的地址*(p++) = 1 //此时表达式p++的值即为p的值,所以最终*(p++)指向的仍然为a[0]的值1。*p++ = 1; //*p++等价于*(p);(p++);所以最终表达式的值仍为a

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档