版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章指针缪裕青2015.32本章主要内容什么是指针?指针变量声明指针变量初始化与赋值指针运算通过指针处理字符串指针作为函数的参数动态分配内存31.什么是指针?41.什么是指针?指针——是变量,它保存了另一个变量的地址。在不致混淆的情况下,通常将指针变量简称为指针。p
100num1000F1001F1002F1003F1001000F6100F6101F6102F6103F变量pintnum指针是一种特殊的变量,它的值是其他变量的地址数据地址图示:指针变量52.指针变量声明指针变量声明的一般格式:
数据类型*指针变量名;例:
int*p; float*q; char*s1,*s2;指针变量声明三要素:指针变量名、指针所指的变量类型(基类型)、指针值指针未赋初值时为随机数。随机地址p?随机地址q?随机地址s1?随机地址s2?intfloatcharchar基类型指针名指针值63.指针变量初始化与赋值指针变量初始化:
数据类型*指针变量名=内存地址;指针变量赋值
指针变量名=内存地址;C规定:变量的地址:可以用取地址运算符‘&’
来获取数组的地址:可以用一维数组名,表示数组首元素的地址函数的地址:可以用函数名,表示函数的首地址73.指针变量初始化与赋值(续)例:#include<stdio.h>voidmain()//普通变量与指针变量{ intx=1; int*p; printf("x=%d\n",x);//输出普通变量的值
printf("p=%X\n",p);//输出指针变量的值
p=&x; printf("p=%X\n",p);//输出指针变量的值}随机地址变量x的地址83.指针变量初始化与赋值(续)例:int*ptr,i=10;ptr=&i; //存放整型变量i的地址,即指向单个变量iinta[5],*ap;ap=a; //存放整型数组a的首地址,即指向数组achar*sp="string"; //指向字符串的首地址int*p=NULL;//指针p为空指针,即p=0a[0]a[1]a[2]a[3]a[4]apspstring\010iptr指针指向一个变量&i指针指向一个数组指针指向一个字符串94.指针运算如何得到一个变量的地址?取地址运算符:“&”,得到变量的地址;如何得到一个指针所指向的变量?指针运算符:“*”,得到指针所指向的变量。例:inta=3;
int*p;
p=&a;
*p=5;
printf("%d\n",a);
ap*p35随机地址&a5//相当于a=5printf("%d\n",*p);
5通过变量名直接访问数据通过指针间接访问数据104.指针运算(续)注意:*不同场合的含义例:int*p,a;//定义p为指针变量p=&a;//取变量a的地址赋值给p*p=2;//p所指变量赋值为2114.指针运算(续)指针之间赋值什么意思?将一个指针变量的值赋值给另一个指针变量,结果是两个指针指向相同的地址单元。例:
inta=100; int*ip=&a;
//变量a的地址保存在ip中
int*jp=ip;
//将ip的值赋值给jp,即ip和jp都指向变量ajpip100a124.指针运算(续)指针加减运算什么意思?相当于地址改变,即完成指针移动,实现对不同数据单元的访问操作。对于不同的基类型,移动的单位长度不同。例如,
inta=10;doubleb=1.2; int*p=&a;p++;//p的值加1个单位长度(4个字节) double*q=&b;
q++;//q的值加1个单位长度(8个字节)134.指针运算(续)例1:#include<stdio.h>voidmain()//指针运算{ inta[2]={1,2};
int*p=a;
//数组的首地址给指针
printf("p=%X\n",p); printf("*p=%d\n",*p);
p++;
//单位长度是4个字节
printf("p=%X\n",p); printf("*p=%d\n",*p);}144.指针运算(续)例2:#include<stdio.h>voidmain()//指针运算{ doubled[2]={1.0,2.0};
double*p=d; printf("p=%X\n",p); printf("*p=%f\n",*p);
p++;//单位长度是4个字节
printf("p=%X\n",p); printf("*p=%f\n",*p);}154.指针运算(续)指针关系运算什么意思?相当于两个指针所指示的地址进行关系运算例如,if(p<q)if(p!=NULL)指针运算的实质是地址的运算164.指针运算(续)例:#include<stdio.h>voidmain()//指针运算{ inta[2]={1,2};
int*p=a; int*q=a+2;//加2个单位长度
printf("p=%X\n",p); printf("q=%X\n",q); while(p<q) {
p++; printf("p=%X\n",p); }}17练习判断对错:inti;float*p;p=&i;inti,*p;
p=&i;int*p;p=100;int*p;float*q;p=q;×√××一个指针变量不能指向与其基类型不同的变量!指针变量只能存放地址!不能存放常量数据只能在类型相同的指针变量之间赋值!18例:#include<stdio.h>voidmain(){
char*p,*q;
p="C++program!";
q=p;//两个指针指向同一个字符串
while(*q!=0) { printf("%c",*q++);//一个一个字符输出
} printf("\n");
printf("%s\n",p);//按照字符串格式输出}5.通过指针处理字符串195.通过指针处理字符串指针可以指向一个字符串,与字符数组的区别:定义方法不同charstr[10];//字符数组存放字符串char*ptr;//指针指向字符串赋值方法和含义不同charstr[10];//字符数组存放字符串
str="china";
//直接赋值是错误的strcpy(str,"china");//正确,通过函数赋值char*ptr;//指针指向字符串
ptr="china";//正确,通过指针可以直接赋值×√√20指针变量必须指向确切变量的地址,才能通过指针对变量进行操作。例:#include<stdio.h>voidmain(){
char*p,*q;
p="C++program!";
q=p;//两个指针指向同一个字符串
scanf("%s",p); while(*p!=0) { printf("%c",*p++);//一个一个字符输出
} printf("\n"); printf("%s\n",q);//整个字符串输出}5.通过指针处理字符串×#include<stdio.h>voidmain(){
char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林公园树木移植合同
- 时尚品牌旗舰店装修承包
- 超市装修项目详细合同解读
- 金融科技石料运输协议样本
- 煤炭货运居间服务协议
- 体育与健康人教3~4年级全一册篮球原地双手传球教案
- (大单元整体教学)8.2组合问题教学设计
- 部编版三年级语文上册《司马光》教学设计
- 电子产品货车运输协议
- 汽车配件紧急运输协议
- 医院重点及特色专科建设情况汇报
- 2024-2034年全球及中国慢性疼痛治疗行业市场发展分析及前景趋势与投资发展研究报告
- 小学科学实验教学的现状及改进策略的研究
- 2024年全国甲卷高考化学试卷(真题+答案)
- 第5课缤纷梦家园(教案)- 三年级上册信息技术 粤教版(B版)
- 统一消息中心平台建设需求
- 2024年大学生就业形势调查报告13篇
- 重庆市北碚区水土街道公开选拔11名农村本土人才及社区后备干部高频考题难、易错点模拟试题(共500题)附带答案详解
- 医用离心机校准规范
- 小学书法教育调查研究报告总结
- 乒乓球火箭实验
评论
0/150
提交评论