




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、指针及指针变量的基本概念 语言程序设计C明 德 格 物 经 世 致 用int main( )int main( ) char c = K; char c = K; int b = 200; int b = 200; int a = 100; int a = 100; C语言什么是指针变量的三要素变量的三要素变量的名字变量的值变量的地址指针将地址形象化的称为将地址形象化的称为“指针指针”指针C语言什么是指针 “指针”是个地址的概念,是一种数据类型,是一个代表内存地址的十六进制数。 指针有两种含义,一是作为数据类型,二是作为实体。指针数据能进行什么运算,有什么用呢?(与整型数据、实型数据比较) 地
2、址是整数还是实数?地址有什么用?两个地址能加减乘除?C语言用来定位内存中的数据,对数据进行读写(数据访问)。u 在程序中:对数据进行加工处理(读、运算、写、输入、输出)。PC机中,一个地址是一个32位或64位的二进制数。u在程序中:变量名、数组名、函数名经过翻译程序翻译为地址,这些地址和名称对应,根据名称所处的环境和属性决定对该地址的内容是读还是写。地址的作用地址的名称地址(内存)的分配 内存是系统资源,必须通过操作系统来分配。u 在程序中:先定义后使用及动态存储分配。什么是指针C语言内存的每个字节有一个地址,一个数据可能占据一个字节,也可能占据多个字节,占据多个字节时,以哪个字节的地址作为数
3、据的地址呢?以数据占据内存的首地址作为数据的地址。什么是指针变量a的地址是:0014FF34变量b的地址是:0014FF38变量c的地址是:0014FF3CC语言首地址:把每个数据占据的字节按字节的地址由小到大,从上往下排的首地址,这种做法通常称为逻辑地址空间, 是内存地址的一种排列示意(地址映射)。数据类型决定数据在分配存储时占据多少个字节,也决定读写时,读写多少个字节才是一个完整的数据读写。因此数据的地址是有类型的,就是数据的类型。问既然数据地址都是数据在内存中的首地址,那么读写时,计算机是怎么知道从该地址开始去读写多少个字节的?答什么是指针 指针变量 如果一个变量是专门用来存放其它变量的
4、地址,那么就称这个变量为指针变量。 为了和一般类型名区分,c语言中的指针类型符为:type *其中*表示指针,如int *。C语言 指针变量的定义及使用int a = 200;int * p; /定义名字为p的指针变量p = &a; /将变量a的地址赋值给指针变量pC语言指针变量: int * p; p = &a; 区分:给指针变量赋值,要使用另一个变量的地址。一般变量与指针变量的区别:一般变量:int a; a = 200; 什么是指针指针变量定义的一般形式 type *标识符; 或 type (*标识符);例:int *p; double *q; char *s ; flo
5、at *t ;C语言指针变量的定义、赋值与使用注意:type可以是基本类型、构造类型、函数类型,指针类型。C语言指针变量的赋值01给指针变量赋的地址值,必须是经过操作系统分配的地址;指针变量定义后,就可以给指针变量赋值了,指针变量的赋值不同于数据变量(整型、实型、字符型变量)赋值。(1):int a, *p;P=&a; (2):float a, *p=&a; 02指针变量的值(地址值)的类型与赋值的地址值的类型要匹配;(2):float a;int *p = &a; C语言指针变量的赋值(3):int *p;p = NULL; (6):int *p,*q, a10;p
6、= a;q = p;(5):int *p;p = 1000; (6):int a, *p, *q; p = &a;q = p; 03可以给指针变量赋给一个空地址值NULL;04a没有值,即使有值,也不是合法的地址值;051000不是合法的地址值,不是经过操作系统分配的地址值,不能在程序指定一个数为地址;06p的地址值的类型与q的地址值类型要匹配。(4):int a, *p;p = a;C语言指针变量赋值注意:指针变量的值可以赋值为NULL,这时不允许引用(访问)其指向的对象。例:int *p; p=NULL; *p=6; /错误,不允许C语言指针是地址的一种形象称呼。有时也用来称呼指针
7、变量或指针常量,要根据环境来区分。指针变量值是地址的变量。指针类型在已经定义了的类型名上加上*,一般形式为type*。相关概念相关概念指针变量的定义、赋值与使用两个与指针变量有关的运算符1)取地址运算符“&”取地址运算符“&”是单目运算符,其结合性为自右至左,功能是取变量的地址。在学习scanf函数及前面介绍指针变量赋值中,已经了解并使用了“&”运算符。2)取内容运算符“*”取内容运算符“*”是单目运算符,其结合性为自右至左,用来表示指针变量所指向的变量内容(值)。在“*”运算符之后跟的变量必须是指针变量。注意:指针运算符“*”和指针变量定义中的指针说明符“*”不是一回
8、事。在指针变量的定义中,“*”是类型说明符,表示其后的变量是指针类型,而表达式中出现的“*”则是一个运算符,用以表示指针变量所指向的变量。C语言指针的运算 C语言小结对指针变量的使用区分为使用指针变量本身还是使用其指向的对象。如果是使用指针变量本身,在赋值时要遵守指针赋值的规则,其它情况时要遵守指针运算的规则。如果是使用指针指向的对象,则要带上*予以区分,遵循指向的对象所属的类型的使用方法。C语言例:通过指针变量存取整型变量。#include int main() int x,y;int *p; /定义指针变量pp=&x; /使指针变量p指向一个变量xprintf(please inp
9、ut x=);scanf(%d,p); / 用指针变量p操作它所指向的变量xprintf(x=%dn,*p); p=&y; /使指针变量p指向另一个变量yprintf(please input y=);scanf(%d,p); /用指针变量p操作它所指向的变量y,与存取x的语句统一printf(y=%dn,*p);return 0;源程序指针变量的使用C语言例2:定义两个指针变量,交换指针变量的值。#include int main() int a=100,b=200;int *p1, *p2, *p;p1=&a;p2=&b;printf(a=%d,b=%dn,a,b)
10、;printf(*p1=%d,*p2=%dn,*p1, *p2);p=p1; p1=p2; p2=p;printf(a=%d,b=%dn,a,b);printf(*p1=%d,*p2=%dn,*p1, *p2);return 0;源程序指针变量的使用程序分析:程序分析:指针变量可以像基本类型变量一样进指针变量可以像基本类型变量一样进行交换。交换前行交换。交换前p1p1指向指向a a,p2p2指向指向b b,交换后,交换后,p1p1指向指向b b,p2p2指向指向a a。指针的运算就是地址值的运算。u 两个指针运算符:&,*;u 指针加、减一个整数;u 指针相减;u 指针比较。C语言指针
11、的运算 C语言数组:数组名就是地址,是该数组的元素占据的一块连续存储区的首地址,而且是常量地址。数组定义语句执行后,数组名对应的地址值在代码中不许更改。结合c语言领会数据的地址什么是指针例:定义一个基类型为float和double,长度为8的数组,输入8个实数,要求输出数组元素的值以及每个数组元素的地址。比较两个不同类型数组输出的结果。#include #define N 8void main() float aN=1,3,5,7,9,11,13,15; int i; for(i=0;iN;i+) printf(%pt%fn,&ai,ai); C语言一维数组应用举例#include #
12、define N 8void main() double aN =1,3,5,7,9,11,13,15; int i; for(i=0;iN;i+) printf(%pt%fn,&ai,ai); C语言指针加、减一个整数条件:指针变量指向一块连续数据存储区设有指针变量p,则p+1指向同类型的下一个数据;p-1指向同类型的上一个数据。例:int a10,*p,*q,*r; p=&a2; q=p-1; /等效于 q=&a1; r=p+1; /等效于 r=&a3;显然, p+i指向同类型的后面第i个数据。a0a0 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 a7a7 a8a8 a9a9pp-1p+1C语言指针相减条件:二个指针变量类型相同且指向同一块连续数据存储区设指针变量为p、q,则p-q为二个指针p,q间元素的个数。例:int a10,*p,*q; p=&a7; q=&a1; printf(“%dn”,p-q); /结果为6a0a0 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 a7a7 a8a8 a9a9qpC语言指针比较条件:二个指针变量类型相同且指向同一块连续数据存储区设指针变量为p、q,则p,q可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度多人持股企业股权转让及后续运营管理协议
- 2025年二手房买卖合同修订:智能家居设备验收标准
- 2025版年薪制员工劳动合同法实施细则解读与应用指南
- 2025年度汽车租赁服务合同规范范本
- 2025年货运司机安全责任与福利保障合同
- 2025版农民工劳动合同模板(含劳动纠纷解决)
- 2025年度绿色有机猪肉直销合作合同模板
- 2025年蔬菜种植基地社会化服务合作协议
- 2025厂房租赁居间合同(含设备配套服务)
- 贵州省玉屏侗族自治县2025年上半年公开招聘城市协管员试题含答案分析
- 2025浙江温州永嘉县国有企业面向社会招聘25人考试参考题库附答案解析
- 烧结基础理论课件
- 《家庭教育学》全套教学课件
- 法律知识培训课件
- 2024年安康社区工作者考试真题及答案
- 业财融合与价值创造课件
- 长沙市名校小升初分班考试数学试卷(含答案)
- 肺动脉栓塞护理查房
- 农村房地产转让合同协议
- 拉链专业工艺讲解
- 2025版抵押贷款抵押物抵押权登记及变更手续协议模板
评论
0/150
提交评论