版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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位系统下每个运行的程序
2、系统都会为其分配4G的(虚拟)内存空间。内存大小用途说明1GKernel内核空间 xx环境变量和命令行参数 xx栈用于存放局部变量、函数形参。由操作系统分配、释放。向下生长xx堆用malloc()申请堆空间,用free()释放堆空间。由程序员分配、释放。向上生长。xxbss静态区。bss存放未初始化的变量,自动赋值为0。静态区变量生命周期从编译开始到程序运行结束。xxdata静态区。data存放初始化过的变量。静态区变量生命周期从编译开始到程序运行结束。xx字符串常量区只读。printf("Hello World");xx代码段存放指令。只读。
3、; · 编译四步骤预处理编译汇编链接替换头文件将C转换为汇编将汇编语言转换为机器代码链接函数 · 数据类型告诉CPU如何读写内存。基本数据类型:char,short,int,long,float,double.构造数据类型:数组,结构体,联合体。指针类型:空类型:void C语言中数据类型的字节长度 · 局部变量生命周期从定义开始到函数结束,作用域在当前函数模块内。· 全局变量生命周期从编译开始到程序运行结束。作用域在变量定义之下。全局变量的内存地址在编译的时候就已经
4、确定,所以无论程序运行多少次全局变量的地址都不会改变。全部变量和局部变量重名的话全局变量就会被屏蔽。 · static作用:用于声明一个静态变量。不初始化存储在bass区并且自动赋值为0,初始化过的存储在data区。生命周期:从编译开始到程序运行结束。作用域:static修饰的局部变量,作用域在局部。static修饰的全局变量,作用域在定义之下,可见域在当前文件中。static修饰的变量外部文件无法调用。static修饰函数用于隐藏该函数,函数可见域只在当前文件内。 · extern引用外部变量。 ·
5、; 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
6、 *类型指针只能指向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,偏移为
7、n个指向的空间类型大小。int *p;char *q;p+;/偏移4个字节q+;/偏移1个字节 指针与数组:指针与数组用法上面的差别仅仅在于指针为变量,数组名为常量。通常用指针指向数组是指向数组的首元素,便于操作。 int a10;int *p=a;/a = &a0int (*q)=&a;等价关系:p = a =&a0*(p+n) = *(a+n) =an =pn =(*q)n =*(*q+n) int *p;int a10=1,2,3,4,5,6,7,8,9,0;/p和a都为指针,但是p为(int *型,4个字节)指针变量,a为(int
8、10型,40个字节)指针常量。p=&a0;*p = *a; /a为a0的地址*(p+) = 1 /此时表达式p+的值即为p的值,所以最终*(p+)指向的仍然为a0的值1。*p+ = 1; /*p+等价于*(p);(p+);所以最终表达式的值仍为a0的值1。 p+; p0 = a1=2;/此时p指向a1。 int (*b)4 = &a;/指向数组的指针,a(数组名)等价于(*b) 指针与二维数组:等价关系:int a23;int *p =&a00;p = &a00 = a0;*(p+n) = pn = *(a0+n) =*(*(a+0
9、)+n);int (*q)3 = a = &a0;q = a =&a0;*q = a0 = &a00;*(*(q+n)+m) = *(*(a+n)+m) = anm = qnm =*(qn+m) = *(an+m)= *(a+n)m; int (*p)23 = &a;/a怎么用*p就怎么用。ann = (*p)nm; 强制类型转换: 指针与字符串:int a10="hello"int *p ="hello"数组a装字符串是从字符串常量区复制到栈区,可以改变字符。指针p是一个指向字符串常量区的指
10、针。不可以单独改变字符。 指针数组:指针数组为数组,其元素为指针。int *a3;这是一个数组,*修饰数组元素为指针。 int *a3;int b10;int i;int *p; a0=b;a1=&i;a2=p; int *a3="hello","world","china" 数组指针(不常用):本质是指针,用来指向数组。 void *类型指针:可以接收任何类型地址,但是使用之前必须强制类型转换。提高代码的通用性。 段错误:修改了不能操作的内存(读不会出现段
11、错误,只有写会出段错误)。 const与指针:const修饰的指针:就近原则。const int *p;const修饰指针指向的类型(int),不能通过指针改变指针指向的空间的值。int const *p;同上;int *const p;修饰指针(p),不能改变指针的指向。const int *const p;同时修饰指针指向与指针指向的类型,不能改变指针的指向,也不能通过指针改变指针指向的值。 int a=5;const int *p=&a;*p=4; /错误!不能通过*p操作a,但是a本身任然是一个变量,可以通过a改变他的值。a=5; /正确!
12、60;· 函数返回值:返回函数执行的结果,可用于传递参数。形参:调用时换地参数。形参类型匹配遵循赋值的原则。形参传递参数只有值传递。值传递当中分为地址传递和值传递。形参没有数组,只有指针。写成数组形式也是指针。 数组传参:不可能一次性传递整个数组空间,一般采取传递首元素首地址,形参用指针接收。指针函数:返回数为指针的函数。 · 函数指针指向函数的指针。函数指针有两个用途:调用函数和做函数的参数。函数指针的声明方法为:返回值类型 ( * 指针变量名) (形参列表);注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号
13、改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:int func(int x); /* 声明一个函数 */int (*f) (int x); /* 声明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */或者使用下面的方法将函数地址赋给函数指针:f = &func;赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 使用typedef重定义函数指针:形式:typed
14、ef 返回类型(*新类型)(参数表) typedef char (*PTRFUN)(int); /相当于char (*)(int) PTRFUN;用PTRFUN代替char (*)(int)。 PTRFUN pFun; char glFun(int a)return;void main() pFun = glFun; (*pFun)(2); 回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 · 堆区堆区开辟空间:可以在程序运行过程中动态开辟空间。留给程序员操作的权限很大。手动开辟,手动释放。#include<stdlib.h>void *malloc(size_t size);/申请
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肩腱鞘炎护理查房
- 结核性骨坏死护理查房
- 深度解析(2026)《GBT 35866-2018粮油检验 小麦粉溶剂保持力的测定》
- 深度解析(2026)《GBT 35753-2017空调器室外机安装用支架》
- 深度解析(2026)《GBT 35564-2017生物质清洁炊事炉具》
- 城市轨道交通运营管理习题库 模块八 城市轨道交通成本效益分析 课后习题及答案
- 跆拳道试卷及分析
- 公共营养师题库及分析
- 小区消防应急预案
- 算力基础设施分层分级建设方案
- 2025中级消防设施操作员作业考试题及答案(1000题)
- 申请建房报告范文
- 高速铁路供电安全检测监测系统(6C系统)总体技术规范
- 人社部发布:职称评审监管暂行办法全解读
- L6562PFC设计参数自动计算电子表格表格
- 药品生产管理-《药品生产质量管理规范》(药事管理课件)
- 财政与税收第七版微课版王晓光课后参考答案
- 钢结构工程投标方案(技术方案)
- 《认识人民币》教学课件(人教版小学数学一年级下册)
- T-CI 284-2024 手卡指压式星状神经节埋线技术操作规范
- 电气设备交接试验
评论
0/150
提交评论