C-ProC语言指针与内存控制原理.ppt_第1页
C-ProC语言指针与内存控制原理.ppt_第2页
C-ProC语言指针与内存控制原理.ppt_第3页
C-ProC语言指针与内存控制原理.ppt_第4页
C-ProC语言指针与内存控制原理.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、C/Pro*c语言指针与内存控制原理,概要,2,指针、数组、结构体 内存控制,Pro*C结构 SQL通讯区 Pro*C预编译,第一部分 C语言常用技术,第二部分 Pro*C原理,C语言的内存管理,对于汇编以后的高级编程语言来说,通过指针对内存进行控制是C语言独有的功能。,3,指针,指针也是变量,只不过指针中存储的是内存中的地址。,4,指针变量,一般变量,*p = 10,p = char mon2; int day; ;,struct stu; char name20; struct date_bri brithday; float score; newstu;,struct stu newst

2、u110,struct stu *stu_p,结构体数组,结构体指针,结构体指针,动态内存分配,动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间。,9,优点: 1、不需要预先分配存储空间; 2、分配的空间可以根据程序的需要扩大或缩小(按需分配)。,内存分配方式,10,malloc and free,malloc函数 void *malloc (unsigned int size),11,在内存的动态存储区中分配一个长度为size的连续空间。 参数 :无符号整形数。 返回值:指向所分配的连续存储域的起始地址的指针。,free函数 void free(void *ptr);,释放已分

3、配的内存 free()后,将指针置为NULL,内存分配,main() /*定义一个指定类型的指针*/ int *p=NULL ; /*计算分配空间大小|分配内存|类型转换|接收返回值*/ p=(int *)malloc(sizeof(int); /*检查指针是否为NULL */ If (p = NULL) printf( “Erroer ,p); free(p); /*释放已分配的内存*/ p=NULL; /*将指针置为NULL */ return 0; ,12,动态内存分配中的异常,1、内存分配失败,检查返回的NULL指针 2、内存初始化 memset() 3、访问内存时超出分配的内存边界

4、4、释放内存: 整体释放, 必须是动态分配的内存 5、访问被释放过的内存 将相应的指针设置为NULL 6、内存泄漏(申请与释放必须配对) 7、重复释放内存,13,内存操作函数,memset(); memcpy(); memcmp (); ,14,字符串拷贝 extern char *strcpy(char *dest,char *src); 内存拷贝 extern void *memcpy( void *dest, void *src, unsigned int count);,15,字符串比较 extern int strcmp(char *s1, char * s2); 内存比较 exte

5、rn int memcmp( void *buf1, void *buf2,unsigned int count);,strlen() and sizeof(),strlen(char*)函数求的是字符串的实际长度,它求得的是从开始到遇到第一个0 sizeof()返回的是变量所占的内存数,16,char str20=0123456789; int a=strlen(str); /*a=10*/ int b=sizeof(str); /*b=20*/,Pro*C 程序概述,把过程化语言C和非过程化语言SQL地结合起来。具有过程处理能力,又能完成数据库的处理任务。,17,Pro*C程序结构,18,

6、ProC 程序,/*外部声明部*/ #include /* 声明段,声明SQL变量 */ EXEC SQL BEGIN DECLARE SECTION; VARCHARusername20; VARCHARpassword20; EXEC SQL END DECLARE SECTION; /* SQL通讯区声明 */ EXEC SQL INCLUDE sqlca; /* C函数声明,错误处理 */ void sqlerror();,19,开始声明 宿主变量,结束声明 宿主变量,/* 程序体 */ void main() /*内部声明部*/ /*内部声明段,声明局部SQL变量*/ EXEC SQ

7、L BEGIN DECLARE SECTION; int emp_number; VARCHAR emp_name15; float salary; float commission; EXEC SQL END DECLARE SECTION; /*内部声明段,声明局部C变量*/ int total_number; /*登录到Oracle*/ strcpy( username.arr, user ); username.len = strlen( username.arr ); strcpy( password.arr, user ); password.len = strlen( passw

8、ord.arr );,20,/*错误处理语句*/ EXEC SQL WHENEVER SQLERROR DO sqlerror(); /*连接到Oracle数据库*/ EXEC SQL CONNECT :username IDENTIFIED BY :password; total_number = 0; /*查询语句*/ EXEC SQL WHENEVER NOT FOUND GOTO notfound; EXEC SQL SELECT ENAME, SAL, COMM INTO :emp_name, :salary, :commission FROM EMP WHERE EMPNO = :

9、emp_number; continue; notfound:,21,捕获Oracle 错误,定义错误处理方法,SQL变量可在SQL语句中引用,SQL变量前加入冒号“:”指示符;也可在C语句中引用,不能加指示符。,连接ORACLE数据库,printf( nNot a valid employeen ); /*结束处理,退出Oracle系统*/ EXEC SQL COMMIT WORK RELEASE; /*错误处理*/ void sqlerror() EXEC SQL WHENEVER SQLERROR CONTINUE; printf( nOracle ERROR detected:n );

10、 printf( n%70s, sqlca.sqlerrm.sqlerrmc ); /*回滚事务*/ EXEC SQL ROLLBACK RELEASE; ,22,SQL通讯区 SQLCA,23,EXEC SQL INCLUDE SQLCA; 此部分提供了用户运行程序的成败记录和错误处理 Struct sqlca char sqlcaid 8 ; long sqlabc; -用于记录sql通讯区长度 long sqlcode; -保留最近执行的SQL语句的状态码 struct unsigned short sqlerrml; sqlerrm; char sqlerrp 8 ; long sql

11、errd 6 ; char sqlwarn 8 ; char sqlext 8 ; struct sqlca sqlca;,24,NUM_RECORDS_PROCESSED sqlerrd2 最近被执行的SQL语句影响的记录行数。,sqlcode,sqlcode: 用于记录最近执行的SQL语句的状态码,这些状态码指明SQL语句的操作结果: =0: 表示SQL语句正确执行,没有错误和异常发生 0: SQL语句被执行,但发生异常,如未满足WHERE子句检索条件,或SELECT、FETCH没有行返回时,就出现异常 0: 表示由于数据库、系统、网络或应用程序错误, SQL语句未被执行,当前事务一般应回滚,25,26,Pro*C预编译,将Pr

温馨提示

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

评论

0/150

提交评论