- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言8(指)
第八章 指 针
基本问题
1.为什么要使用指针
C语言作为高级程序设计语言与其它高级程序设计语言的不同之处在于C语言能直接对内存的物理地址进行操作,也就是允许利用变量的地址访问变量或利用数组的地址访问数组元素。
如果C语言要对内存地址操作就需要用指针。;2.什么是指针
指针就是存放数据的内存单元地址,它是一种数据类型。
3.变量与内存单元地址的关系
(1)程序中可以用变量来存放各种数据,因此每个变量都需要分配连续的字节。
(2)由于数据类型的不同,每个变量需要分配的字节数目也不同。
(3)对源程序进行编译时,每遇到一个变量,就给它分配内存单元,同时在“变量与地址对照表”中记录变量的名称、数据类型和地址。
;例如:在程序清单中有下列数据定义语句:
char ch=A;short s=5;float f;
则分配的内存单元如图所示,“变量与地址对照表”如表所示。 ;4.数组与内存单元地址的关系
(1)对一个数组来说,所分配的内存单元必须是连续的。每个数组元素占用连续的内存单元。
(2)一个数组占用的总字节数等于数组长度×每个数组元素占用的字节数。
(3)对源程序进行编译时,每遇到一个数组,就给它分配内存单元,同时在“数组与地址对照表”中记录数组名、数据类型、数组长度和数组首地址。
;例如:在程序清单中有下列数据定义语句:
short a[3]={1,2,3};
则分配的内存单元如图所示,“数组与地址对照表”如表所示。 ;(4)一个数组的首地址,就是第一个元素(即下标为0的数组元素)的地址。
(5)如果知道数组a的首地址和数据类型,可以通过下列公式计算出每个数组元素的地址,从而找到每个数组元素。
数组元素a[i]的地址=数组首地址+i*数据类型所占的字节数
;8.1 指针变量
1.什么是指针变量
指针所表示的地址如果要存放,也必须要存放在变量中,而存放地址值的变量就是指针变量。
一、指针变量的定义和初始化
1.定义格式:数据类型符 *指针变量名[=初值];
2.功能:定义指向“数据类型”的变量或数组的指针变量,同时给其赋初值。
3.说明:
(1)指针变量名的构成规则是标识符,前面必须有*号。;(2)数据类型可以选取任何基本数据类型,也可以用以后要介绍的其他数据类型。但需要注意的是:定义指针变量的数据类型不是指针变量中存放的数据类型,而是它将要指向的变量或数组的数据类型。
(3)定义成某种数据类型的指针变量,只能用来指向同种数据类型的变量或数组。
(4)给指针变量赋的“初值”必须是地址值,可以是
“变量名”、“数组元素”、“数组名”。这里的变量或数组必须事先已定义过。;例如:int a;
int *p=a; /*指针变量p指向了变量a*/
float f1,f[5],*p1=f1,*p2=f,*p3=f[2];;二、取地址运算符和指针运算符
1.运算符
;2.说明
(1)取地址运算符()的运算对象必须是已定义过的变量、数组元素,但不可以是数组名。
int a,b[10],*p;
p=a; (或p=b[2];)是正确的。
p=b; (是错误的)
p=b;是正确的。;(2)指针运算符(*)的运算对象必须是地址。可以是已赋值过的指针变量,也可以是变量或数组元素的地址,但不能是整数、也不能是非地址型的变量。运算结果就是地址对应的对象。
例如:int a,b[5],*p=a,*p1=b;
a=10;
*p=10;
*a=10;
b[0]=5;
*p1=5;
*b[0]=5;;8.2 指针变量的使用
一、指向变量的指针变量的使用
1.使用说明:
(1)如果要使用指针变量指向某个变量时,首先要定义变量和同类型的指针变量;
(2)将变量的地址赋值给指针变量,则指针变量就可以指向该变量;
(3)当指针变量一旦指向了某个变量后,就可以利用指针变量来使用该变量。;2.举例说明
例1:指针变量引用举例。
假设有如下的定义语句,则列表给出了几个指针引用的表达式及其含义。
int a[6]={3,7,11,13,17,19},b,*p,*q;;例2:阅读下列程序看输出结果
#include stdio.h
void main()
{ int j=28,k,*p=j;
char c1,c2=f,*q;
k=*p*2-3;
q=c1;
*q=c2+1;
printf(k=%d\nc1=\%c\\n,k,*q);
};例3:输入3个整数,按从小到大的顺序输出。要求用指针变量处理。
先考虑不用指针变量编程:
void main()
{ int a,b,c,t;
scanf(%d,
您可能关注的文档
- CD文字排版战技艺.doc
- ch1-国际支.ppt
- CAD轴测图练习.ppt
- CDS常用公及对照表运用.ppt
- cha06问设计.ppt
- chap5 体设计.ppt
- Chapte 2 (L2学习).ppt
- CATIA MP功能性建模.ppt
- ASCO电磁防爆类型详细讲解防爆选型资料.ppt
- chapte 4 噪声与干扰.ppt
- 2025年成都市玩偶生产荧光涂鸦互动玩偶开发可行性研究报告.docx
- 2025年成都市海绵生产用于体育馆室外运动场地透水改造可行性研究报告.docx
- 2025年天津市体操鞋企业团建运动应用报告.docx
- 2025年上海市溶洞极限运动(速降)场地开发可行性研究报告.docx
- 2025年上海市涵洞工程施工技术应用可行性研究报告.docx
- 2025年上海市体育场馆设施扎带安全防护可行性研究报告.docx
- 2025年上海市牦牛育肥产业园区建设可行性研究报告.docx
- 2025年旅拍宠物陪伴拍摄项目可行性研究报告.docx
- 2025年上海市进口食品节庆主题快闪店可行性研究报告.docx
- 2025年上海市洗选厂尾矿综合利用产业化可行性研究报告.docx
最近下载
- GB15763.1-2009 建筑用安全玻璃 第1部分:防火玻璃 (2).pdf VIP
- DB5101T 217—2025成都市城市绿化养护技术规程.pdf
- 漫画解读--非煤露天矿山重大事故隐患判定标准.pdf
- 伤口、造口、失禁性皮炎理论考试试题与参考答案.docx VIP
- LNG气化站安装工程施工的方案.doc VIP
- 2023年8月26日全国事业单位联考A类《职业能力倾向测验》真题.pdf VIP
- 跨境电子商务英语 课件 柯可 Unit 1 Overview of Cross-Border E-Commerce、 Unit 2 Main Cross-Border E-Commerce Platforms.pptx
- 2024年辅警招聘《公安工作基本知识》培训考试题库 (附答案).docx VIP
- 低氧对肝脏脂质代谢影响研究.docx VIP
- GB T 34986-2017 产品加速试验方法.doc VIP
文档评论(0)