- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《高级语言程序设计》第六章课堂笔记-奥鹏教育.doc
奥鹏远程教育中心助学服务部
PAGE
心系天下求学人 Page PAGE 4 of NUMPAGES 4 专业 专注 周到 细致
西南交《高级语言程序设计》第六章 指针初步 课堂笔记
主要知识点掌握程度
要求能够理解和掌握指针的基本特性,掌握指针的创建即初始化方法,理解指针的用法,能解答指针方面的编程题。
知识点整理
什么是指针?
指针是C语言的一种数据类型,该数据类型以内存地址为值(一个非负整数),并提供了相关的一系列操作。
指针的基本属性
1、值属性:即指针就是内存地址,指针值即地址值。
2、存贮属性:C指针有三种存贮属性,分别是:
(1) near (近)指针:16位段内偏移地址
(2) far(远)指针:16位段地址+16位段内偏移地址
(3) huge(巨)指针:32位规格化的具有唯一性的内存地址
C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option-compiler-model选项),默认的编译模式为small, 在该编译模式下,指针的默认属性为near。
3、对象属性:指该地址开始的内存单元中存放的数据,定义指针变量时,必须指定指针变量的对象类型。我们使用指针的主要目的就是通过指针访问内存中的数据。
指针常量与变量
1、指针常量
(1)空指针:NULL
符号常量NULL定义于头文件stdio.h中,其值为整数0,代表地址0和空指针的概念。
(2)数组的名字:代表数组的首地址常量,即数组第一个元素的首地址。
(3)函数的名字:代表子程序调用的入口地址。
2、指针变量
(1) 定义方法:
对象类型名 *指针变量名;
例:int *p,*q; double *r; char *s;
注意:
(a) sizeof(p)=sizeof(q)=sizeof(r)=sizeof(s)=2
这是因为:指针变量的默认属性为near指针,即16位段内偏移地址,需要2字节来存贮。
(b)*号前面的数据类型是指定指针变量对象的数据类型
(2) 指针变量的初始化
C语言允许用指针常量对指针变量初始化.
例: int a[4],*p=NULL,*q=a+1;
注意:
(a)不能将一个整数值直接作为内存地址对指??变量进行初始化
如:long *p=0x410; 是错误的用法
(b) 作为一种特殊情况,C语言允许用一个字符串常量初始化一个char *型的指针变量
如: char *s=“ABCD”;
/*变量s得到的是字符串常量第一个字符(字母A)的地址,即串首地址*/
与指针有关的基本操作
1、取地址运算: 数据对象名
例:int a[5],*p,*q,b=15;
p=a[1]; q=b;
2、取对象运算:*指针表达式
例:int a=123,*p;
p=a; printf(“%d”,*p);
则打印结果为123,即变量a的值
3、指针对象的有关运算:
指针对象可进行与之同类型变量的所有运算,如赋值,自加减1,四则运算等。
例:int a,*p;
p=a;
/*给对象赋值和自反赋值*/
*p=15; /*相当于a=15 */
*p*=2; /*相当于a=a*2 */
/*指针对象自加减1的运算*/
(*p)++; (*p)--; ++(*p); --(*p);
/*其它运算*/
*p=(*p)*(*p); /*相当于a=a*a; */
4、正确建立指针对象的方法
(1)用已有的变量或数组空间建立对象
例:int a=15,*p,*q,b[3];
p=a; q=b[1];
(2)用内存分配函数建立对象
介绍两个函数:头文件均为stdlib.h
函数原形: void *malloc(unsigned n)
函数功能:分配n字节连续内存单元供用户使用,分配成功,返回首地址,分配失败,返回NULL。
函数原形: free(void *p)
函数功能:释放由malloc分配的内存单元,由自变量p给出内存块的首地址。
例:double *p;
文档评论(0)