c语言程序设计第8章指针答案,C语言程序设计第8章指针.pptx-资源下载在线文库www.lddoc.cn...

C语言程序设计第8章 指针.pptx

定义学生信息管理系统中的某个子模块的功 能,实现从键盘输入一个班级中所有学生的某 门课程的成绩,通过调用函数实现统计,按规 定格式输出最高分、最低分、平均分,同时输 出优秀人数、良好人数、及格人数、不及格人 数以及所占比例。 1地址及取地址运算符 在程序中定义了一个变量,系统会根据变量的类型为变量分配 相应字节的存储空间,用于存放数据,存放的数据称为内存单元内存单元 的的内容内容 ,而系统为变量分配的存储空间的首个存储单元的地址称为 变量的地址变量的地址 。可按如下的方式获取变量的地址 则 pa 即a的地址存入变量pa,则称“指针变量pa指向变量a”,或 “pa是a的指针”,被pa指向的变量a称为“pa的对象”。“对象” 就是一个有名字的内存区域,即一个变量。这时,对变量a的访问 就有两种方式,分别是直接通过变量a来访问和通过指向a的指针变 量pa来访问。 指针类型是对所有类型的指针的总称,指针的类型指针的类型 是指针变 量所指对象的数据类型。 例如,pa是指向整型变量的指针,简称整型指针。整型指针是 基本类型的指针之一,除各种基本类型之外,允许说明指向数组的 指针、指向函数的指针、指向结构和联合(第九章会讲)的指针以 及指向各类指针的指针。地址是指针变量的值,也称为指针,指针 变量有时也简称为指针,因此,指针指针 一词可以指地址值、指针变量 ,还可以是地址和指针变量二者。 1指针变量的定义 指针的定义形式为 存储存储 类型说明类型说明 数据类型数据类型 *指针变量名指针变量名 ; 说明 (1)指针说明和一般变量说明语法相似,只是在变量之前都有“*”符号。 (2)“*”后面的名字是指针变量名,指针变量名遵循C语言标识符命名规 则。 (3)指针的数据类型,是指针所指向的变量的数据类型,而不是指针自身 的数据类型,指针变量本身只能装地址值,显然只属于整型范畴。 (4)“void *”的指针变量,在使用前可临时强制转换成相应的对象类 型。 2指针变量的初始化 指针变量初始化的一般形式为 存储存储 类型说明类型说明 数据类型数据类型 *指针变量名指针变量名 初始地址值;初始地址值; 说明 (1)赋值号前面的部分为指针的定义,在定义的同时立刻赋值。 (2)初始地址值通常为如下形式int x,*px (3)初始地址值最好不要为具体的十六进制的整数,因为不知该地址是否 可用。 (4)指针类型虽然可装整型数据,但注意指针变量不能存放一般的整型数 ,这个数必须是合理、可用的内存地址。一个一般的整型数代表的地址未 必合理,也未必可用,因为如果在代码区,会造成程序崩溃,而在ROM区 则不可用。 (5)可以把指针初始化为空指针。 例如在头文件stdio.h中,有如下定义 define NULL 0 可以定义 int *pNULL; 1指针的引用 在引用指针变量时,可能有3种情况 (1)给指针变量赋值。如 pa 即把a的地址赋给指针变量pa,又称pa指向a。 (2)引用指针变量指向的变量。 如果已执行“pa”,即指针变量pa指向了整型变量a,则 printf“d“,*p; 其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。 2指针的运算 (1) int i; fori0;ia printf“sc“,*argv,argc1 n; argc; printf“n“; 在Visual C环境下对程序编译和连接后,选择“工程”“设 置”“调试”,在“程序变量”后输入“How are you ” 说明 (1)命令行参数的个数(含命令名称echo)argc的值为5。其中 argv0指向“echo”,argv1指向“How”,,argv4指向“ ”。 (2)假定经编译、连接后生成的可执行文件的名字为echo.(DOS环 境)或echo(UNIX环境),在操作系统环境下输入下面的命令行并按 回车 echo How are you 则输出 How are you 1指向函数的指针的定义与引用 指向函数的指针变量(通常简称函数指针变量)定义形式如下 存储存储 类型说明类型说明 数据类型数据类型 *指针变量名)();指针变量名)(); 例如 int *p; 其中的p被定义为指向一个返回值是整型量的函数 说明 (1)数据类型可以是基本类型或所定义的其他类型。 (2)定义中第一对圆括号是必需的,如果去掉,就成为int *p,含 义为p是一个返回值为指向整型量指针的函数。 (3)指向函数的指针变量不能进行算术运算、关系运算。 (4)让一个指向函数的指针变量指向某一函数时,只需将函数的函数 名赋值给该指针变量,而不要带上相应的函数参数,也不需要带括号 ,例如,函数原型为int countstrchar *s,则应该是 funccountstr,而不应该是funccountstrstr;显然后一种情况 赋值号右边就是一次函数调用,得到的应该是当参数为str时的函数 值,所以这种赋值是错误的。 定义一个指向函数的指针变量,仅表示定义了一个专门用来存放 函数入口地址的指针变量,在程序中只要将某一个函数的地址赋给它 ,它就指向相应的函数。 int countallchar *s 统计字符串中所有字符 的总个数 int number0; while *s0 number; s; return number; void main char str101; int *funcchar *;定义指向函数的指针变 量func scanf“s“,str; funccountx;将函数的地址赋给func printf“x的个数为dn“,*funcstr; funccountall;将函数的地址赋给func printf“所有字符个数为 dn“,*funcstr; 2指向函数的指针变量作函数参数 指向函数的指针变量作为参数传递到其他函数,是函数指 针的重要用途。被调用函数可以通过函数的指针来调用完成不 同功能的具体函数。 int sumint x,int y return xy; int callerint x,int y,int *processint,int return *processx,y; 一个函数可以返回一个int型、float型、char型的数据, 也可以返回一个指针类型的数据。返回指针值的函数简称为指 针函数,正如返回整型的函数简称为整型函数一样。指针函数 的定义格式如下 存储存储 类型说明类型说明 数据类型数据类型 *函数名(形参表)函数名(形参表) 函数体函数体 例如定义 int *fint x,int y 说明 (1)在函数名的两侧分别是函数运算符()和指针运算符*,但 由于()的优先级高于*,因此函数名先与()结合成一个函 数,再与*结合成返回指针值的函数,即返回的是一个地址 值。 (2)用法上,返回指针值函数与其他类型返回值一样。要注意 的是在return语句中,返回的必须为一个地址值,而且类型必 须与定义的返回值类型一致。 注意注意 不能将指针函数说明符* fint ,int写成函数指针说 明符(*f)int,int。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值