当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

上海交通大学:《C程序与算法设计》课程教学资源(课件讲稿)Lecture 08 指针

资源类别:文库,文档格式:PDF,文档页数:85,文件大小:2.4MB,团购合买
 指针  指针与数组  *缓冲区溢出
点击下载完整版文档(PDF)

lecture8一C指针 绳伟光 上海交通大学微纳电子学系 2017年03月21日 SHAN

lecture 8 —— C指针 绳伟光 上海交通大学微纳电子学系 2017年03月21日

内容 ■指针 ■指针与数组 ■*缓冲区溢出 2

 指针  指针与数组  *缓冲区溢出 内容 2

指针(Pointers)变量 理解指针的第一步是理解数据在冯诺依曼计算 机上的存储模式 ■在现代计算机中,数据集中存储在RAM中, RAM各个单元的访问是通过地址(Address)进行 的 目前主要的RAM编址方式是按照字节编址,给 定存储器一个地址,存储器访问与此地址对应 的RAM单元

指针(Pointers)变量  理解指针的第一步是理解数据在冯诺依曼计算 机上的存储模式  在现代计算机中,数据集中存储在RAM中, RAM各个单元的访问是通过地址(Address)进行 的  目前主要的RAM编址方式是按照字节编址,给 定存储器一个地址,存储器访问与此地址对应 的RAM单元 3

内存编址 假设RAM的容量为n Bytes,则可以认为地址的 范围从0到n-1: Address Contents 0 01010011 1 01110101 2 01110011 3 01100001 4 01101110 n-1 01000011 4

内存编址  假设RAM的容量为n Bytes,则可以认为地址的 范围从0到n – 1: 4

变量与内存 程序中的每个变量会占据内存中的一个或多个 字节,首字节的地址被视为该变量的地址 ■下图中变量1的地址为2000: 2000 2001 5

变量与内存  程序中的每个变量会占据内存中的一个或多个 字节,首字节的地址被视为该变量的地址  下图中变量i的地址为2000: 5

指针与地址(结合汇编进行讲解) ■内存地址本身可以存储在称为指针变量 (pointer variables)的对象中 当我们将变量1的地址存储在指针变量p中时, 我们说指针p指向(points to)i,图示如下: i ■注:p存储的是地址,1存储的是真实数据

指针与地址(结合汇编进行讲解)  内存地址本身可以存储在称为指针变量 (pointer variables)的对象中  当我们将变量i的地址存储在指针变量p中时, 我们说指针p指向(points to)i,图示如下:  注:p存储的是地址,i存储的是真实数据 6

指针变量声明 指针变量声明和普通变量类似,区别在于在指针名字 前面加上一个星号: int *p; ■p是一个指针变量,指向内存中int型的对象 ■ 之所以用对象这个称谓,是因为不单可以指向内存 中的变量,还可以指向内存中的其它非变量的部分 注:指针的声明中,星号是附着在指针变量上面的, 而不是类型后面,故此当和普通变量一起声明时要注 意星号的位置: inti,j,a[1g],b[20],*p,*q;

指针变量声明  指针变量声明和普通变量类似,区别在于在指针名字 前面加上一个星号: int *p;  p是一个指针变量,指向内存中int型的对象  之所以用对象这个称谓,是因为p不单可以指向内存 中的变量,还可以指向内存中的其它非变量的部分  注:指针的声明中,星号是附着在指针变量上面的, 而不是类型后面,故此当和普通变量一起声明时要注 意星号的位置: int i, j, a[10], b[20], *p, *q; 7

指针的被引用类型(Referenced Type) C要求所有指针都要指向某种特定类型的对象,该特定类 型称为被引用类型(referenced type): int *p) /points only to integers double *q; /points only to doubles char *r; /points only to characters 被引用类型具体为哪种类型没有限制 声明一个指针只是为指针变量本身分配了空间,并没有 为其指向的对象分配空间,也没有让其指向某个对象 int *p;/points nowhere in particular 指针具体使用时应该用地址值初始化

指针的被引用类型(Referenced Type)  C要求所有指针都要指向某种特定类型的对象,该特定类 型称为被引用类型(referenced type):  被引用类型具体为哪种类型没有限制  声明一个指针只是为指针变量本身分配了空间,并没有 为其指向的对象分配空间,也没有让其指向某个对象  指针具体使用时应该用地址值初始化 8 int *p; /* points only to integers */ double *q; /* points only to doubles */ char *r; /* points only to characters */ int *p; /* points nowhere in particular */

先睹为快一指针初始化示例 File Edit View Search Terminal Help int main(int argc,char **argv) 4 56 int *p; int val 1; 7 p &val; 8 printf("%d\n",*p); 9 return 0; 10 } (gdb) 6 int val 1; (gdb) pp $1 (int *0xbffffl0c (gdb)p *p $2=-1073745171 (gdb)s 7 p &val; (gdb)pp $3 =(int *0xbffffl0c (gdb)s 8 printf ("%d\n",*p); (gdb) p &val $4=(int*) 0xbffff044 (g©db)pp $5 (int *) Oxbffff044 (gdb) p *p $6= (gdb) 9

先睹为快 —— 指针初始化示例 9

The Address and Indirection Operators ■C为操作指针提供了两个特殊的操作符 必得到某变量的地址,用取地址(address)操作符:& 得到指针所指对象的内容,用解引用操作符 (indirection): 10

The Address and Indirection Operators  C 为操作指针提供了两个特殊的操作符 得到某变量的地址,用取地址(address)操作符:& 得到指针所指对象的内容,用解引用操作符 (indirection) :* 10

点击下载完整版文档(PDF)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共85页,可试读20页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有