程序设计与问题求解_第1页
程序设计与问题求解_第2页
程序设计与问题求解_第3页
程序设计与问题求解_第4页
程序设计与问题求解_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论