20-指针概念、定义引用、运算及练习

合集下载

C语言程序设计实训教程第7章 指 针

C语言程序设计实训教程第7章 指 针

12
2)指针与一维数组 【例 7.6】 下列程序的运行结果是( )。[读 程序写结果,重庆市 2001年第 2次等级考试]
13
14
3)指向字符的指针
15
16
17
18
4)指针与二维数组
19
5)指向一维数组的指针(行指针) 【例 7.18】 对 int(﹡p)[5];的正确描述 是( )。[多选题,重庆市 2003年第 1次等级考 试] A. p是数组名 B. p是指针变量名 C. p数组中有 5个元素 D .p指向一个包含 5个元素的整型数组 E. p是一个整型数组 答案:B D
22
7)指针数组 当数组的元素类型为指针时,叫做指针数组。 【例 7.21】 下列程序的运行结果是( )。 [读程序写结果,重庆市 2004年第 2 次等级考试]
23
8)指针做函数参数 指针做函数参数的主要目的是利用在函数中, 利用指针去操作主调函数中的变量。 【例 7.22】 下列程序在数组中同时查找最大 值下标和最小值下标,并分别存放在 main函数的 变量 max和 min中,请填空。[读程序写结果,重 庆市 2003年第 2次等级考试]
10
【例 7.3】 由于指针的数据类型实际上是指定 指针所能指向对象的数据类型,所以不同数据类型 的指针变量不能相互赋值。( )[判断题,重庆市 2005年第 2次等级考试] 答案:对 分析:在某些特定情况下,可以在不同数据类 型指针之间通过强制类型转换赋值。
11
【例 7.4】 若有定义:long intj,﹡p;,则操 作 j=(long int)p;是合法操作。( )[判断题, 重庆市 2004年第 1次等级考试] 答案:对 【例 7.5】 在 C 语言中,程序

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

指针ppt课件

指针ppt课件
该一般形式说明以下几个方面的内容:首先定义变量为指针变量,其 次是该变量能指向一种指针对象,最后是被指向的指针对象能指 向的对象的类型。 例如 int **pp, *ip, i; ip = &i;
pp = &ip; 定义说明pp是指向指针的指针变量;它能指向的是这样一种指针对 象,该指针对象是能指向int型的指针变量。如上述代码让pp指向 指针变量ip,ip指向整型变量i。
int n;
int *p=&n;
int *q=p; int *px=0;是把一个指针初始化为空指针。
2020/12/13
面向对象程序设计
例1: 指针的概念 main() { int a; int *pa=&a; a=10; cout<<“a=“<<a<<endl; cout<<“*pa =“<< *pa <<endl; cout<<“&a =“<< &a <<endl; cout<<“pa =“<< pa <<endl; cout<<“&pa =“<< &pa <<endl;
y=++(*px) px 的目标变量的值加 1 后赋予 y。
2020/12/13
面向对象程序设计
(3)、 指针的相减 设指针p和q是指向同一组数据类型一致的数据,
则p-q运算的结果值是两指针指向的地址位置之间的 数据个数。
例: 统计输入字符串的字符个数 main() {char str[20]; char *p;
2020/12/13

c语言期末考试题及详细答案

c语言期末考试题及详细答案

c语言期末考试题及详细答案一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中合法的变量名?A. 2variableB. intC. _first_variableD. for答案:C2. C语言中,用于定义一个整型数组的关键字是?A. charB. intC. floatD. double答案:B3. 在C语言中,哪个运算符用于比较两个值是否不相等?A. ==B. !=C. =D. <答案:B4. 下列哪个函数用于计算数组中元素的个数?A. strlenB. sizeofC. strcpyD. strcmp答案:B5. C语言中,用于定义一个结构体的关键字是?A. structB. unionC. enumD. typedef答案:A6. 下列哪个选项是C语言中合法的常量?A. 0x1AB. 1.23e-5C. 2.3.4D. 0b101答案:A7. 在C语言中,哪个关键字用于定义一个函数?A. intB. voidC. structD. return答案:B8. C语言中,用于定义一个指针的关键字是?A. intB. charC. floatD. *答案:D9. 下列哪个选项是C语言中合法的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello\nWorld"D. "Hello\tWorld"答案:A10. 在C语言中,哪个运算符用于执行算术运算?A. %B. &C. +D. ||答案:C二、填空题(每题2分,共20分)1. 在C语言中,定义一个整型变量的正确语法是:______。

答案:int variable_name;2. 用于将一个字符串复制到另一个字符串的C语言函数是:______。

答案:strcpy3. C语言中,用于声明一个指向整型变量的指针的语法是:______。

C语言——指针

C语言——指针

4. 结论: 若要使变量的值通过函数调用而发生改变, 则形参必须是指针型,实参为地址量(&<变量名>)
或指针型。
另:全局变量和数组名作为参数也可改变变量的值.
总 结
若要使n个变量的值通过函数调用而发生改变,则
在主调函数中设n个变量,用n个指针变量指向它们。 将这些指针变量作为实参,将其地址传递给被调函
p1 p &a p2 &b p1 &b p2 &a
a 5
b 9
a 5 b 9
}
5,9 9,5
三、指针变量作为函数参数 前面讲过:数值型变量作为函数实参 形参数据值的改变不会影响实参。 但当用地址(指针变量)作参数时,作用为传址, 与数组名类似。 要求:形参、实参均为地址量。
单向 传递
形参,于是,
例:实现10.2 swap(int *p1, int *p2) { int temp; temp=p1; p1=p2;p2= temp; } #include <stdio.h> void main( ) { int a, b;
它代表的是地址+1个单位
重要概念: 指针变量也有各种类型(如上面所示),但指针变 量的值只能是整型值。
二、指针变量的引用方式 *指针变量名----表示所指变量的值。 指针变量名----表示所指向变量的指针(地址)。
两个运算符号:
&: 取地址运算符。 &i *: 指针运算符,取其指向的内容(所指变 量的值)。 *p
9,0,10
10,9,0
§10.3 数组与指针
一个变量的地址为该变量的指针。当用一个变 量来存放地址(指针)时,该变量称为指针变量。
一个数组元素相当于一个简单变量。于是,亦 可用一个指针变量来指向数组元素。

C++ANDUML习题及答案(给学生)

C++ANDUML习题及答案(给学生)

C++ANDUML习题及答案(给学生)复习要求:1.C++语言概述(1)了解C++语言的基本符号。

(2)了解C++语言的词汇(保留字、标识符、常量、运算符、标点符号等)。

(3)掌握C++程序的基本框架(结构程序设计框架、面向对象程序设计框架等)。

(4)能够使用Visual C++ 6.0集成开发环境编辑、编译、运行与调试程序。

2.数据类型、表达式和基本运算(1)掌握C++数据类型(基本类型、指针类型)及其定义方法。

(2)了解C++的常量定义(整型常量、字符常量、逻辑常量、实型常量、地址常量、符号常量)。

(3)掌握变量的定义与使用方法(变量的定义及初始化、全局变量、局部变量)。

(4)掌握C++运算符的种类、运算优先级和结合性。

(5)熟练掌握C++表达式类型及求值规则(赋值运算、算术运算符和算术表达式、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算、指针运算、逗号表达式)。

3.C++的基本语句(1)掌握C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空语句等。

(2)用if语句实现分支结构。

(3)用switch语句实现多分支选择结构。

(4)用for语句实现循环结构。

(5)用while语句实现循环结构。

(6)用do…while语句实现循环结构。

(7)转向语句(goto,continue,break和return)。

(8)掌握分支语句和循环语句的各种嵌套使用。

4.数组、指针与引用(1)掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。

(2)了解字符串与字符数组。

(3)熟练掌握常用字符串函数(strlen,strcpy,strcat,strcmp,strstr等)。

(4)掌握指针与指针变量的概念、指针与地址运算符、指针与数组。

(5)掌握引用的基本概念、引用的定义与使用。

5.掌握函数的有关使用(1)函数的定义方法和调用方法。

(2)函数的类型和返回值。

(3)形式参数与实在参数,参数值的传递。

c语言第10章指针

c语言第10章指针

3.间接引用指针
间接引用指针时,可获得由该指针变量所指向的变量内容。
例如,int i=10,*ip=&i;
ip
i
cout<<*ip<<endl;
0000:F384 0000:F384 210
运行结果为:10 即指针ip所指向的变量i的内容。
*放在定义过的指针变量之前,称为间接引用操作符; *放在指针变量定义中时,称为指针定义符。 非指针变量不能用间接引用操作符,*只能作用于地址。
例如, double d=1.23,*dp; char c,*cp;
在&和cp*=作&d用; 下,对变量d和dp有如下6种操作: 其d,中d,dpp,=*&d*是cd; ,非*法dp的,;&&d指,dp针&是只d指p能。针指的向地与址其即同二类级型指的针量。 另外,指针除了可指向所有基本类型的变量外,指针也可 指向常量、数组、数组元素、函数、指针以及文件等。
int ii=n1t0;b, a[10]; int *inpt=&*pi;1,//*初p2始; 化为整型变量的地址,但 *ip=p&1=i;&//是b;错误的
注意:p2不=p要1将; “//可in以t *将ip=一&个i;”已与赋“值*i的p=指&i针;”混赋淆给。另一个相同类型的指针 前者是p2定=&义a语[5句];,*是指针定义符,系统为指针变量ip分配一个空间, 并2、用i数的地组址的值地初址始值化;可后用者该是数执组行语的句数,组左名右表两边示类。型例不如匹:配。 指 例3、针如变,ip函n=d*d量t数bodob;up在u的b=b[3使ll6ee].地8[用*d;4d=址]前/p2,/!(;.,*5值;p一)由[定4该]要; 函被数$赋$$以的d$:p一$名$个$字$地来址表值$$$,示$:否$。$$则$例是如很#6某#:危.#8变险量的。 没有被do赋ub值le的s指in针(d变ou量bdlep的x值);是一个随机地址,把6.8赋给内存中的 随机位do置ub,le很(可*p能f)破( 坏); 了另一个变量,甚至修改了栈中的函数返回 地址,pf造=s成in计; 算机死机或进入死循环。

第06章 指针

第06章 指针
…...
17
高 级 语 言 程 序 设 计 与 应 用 教 程
6.3 指针和地址运算
1、指针变量的加、减运算(移动运算) 将指针变量的原值加上n个
它指向的变量所占用的内存 指针可以参与加法和减法运算,但其加、减的含义绝对 单元字节数。 不同于一般数值的加减运算。如果指针p是这样定义的: ptype *p;,并且p当前的值是ADDR,那么:
第 六 章
指 针
学习指针是学习C语言中最重要的一环, 能否正确理解 和使用指针是我们是否掌握C语言的一个标志,可以说不懂 C语言中的指针就不懂什么是C语言。
2
高 级 语 言 程 序 设 计 与 应 用 教 程
本章学习重点
指针的概念 指针变量的定义、初始化和引用 指针的运算 指针与一维数组 指针与二维数组 指针与字符串 指针作为函数的参数
第 六 章
指 针
3
高 级 语 言 程 序 设 计 与 应 用 教 程
6.1 指针与地址
1、内存地址──内存中存储单元的编号 教学楼
存储地址
内存
存储 单元
0 …... 2000 2001
601 501
602 502
50
2002 注意:内存单元的地址与内存单元中的数据是 401 402 两个完全不同的概念。 2003 存储单元有
指针变量p 2000 指针变量q 2000
第 六 章
…...
指 针
12
高 级 语 言 程 序 设 计 与 应 用 教 程
指针变量赋值的几种错误方法: 例 int *p = &a; int a;
变量a的定义在后,对a的引 用超出了a的作用域
第 六 章
注意:一个指针变量只能指向同类型的变量如果给指针赋 例 int a; 值时,=号右边的指针类型与左边的指针类型不同,则需要 int *pi = &a; pc不能指向非字符型变量 进行类型强制转换。 char *pc = &a; int a; 赋值语句中,被赋值的指针 例 int int *pi; a; 变量p的前面不能再加“*” int *p; 说明符 char *pc; *p = &a; pi = &a; //pi指向a 不允许直接把一个数(或任 pc = (char *)pi; //pc也指向了a,即pi和pc的值都是a的地址 例 int *p; 何其他非地址类型的数据) p = 2000; 赋值给指针变量
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9.3 指针变量的运算
指针变量可以进行以下运算 (1)赋值运算 【一般形式】指针变量名=地址值; 【作用】使指针变量指向某变量 main() a {int *p,*q,a; p=&a; q=p; q &a p &a }

(2)引用运算 【一般形式】*指针变量名; 【作用】间接访问指针变量指向的变量 main() {int *p,a; p=&a; *p=6; }
小结

基本概念 地址(指针):内存单元编号 指针变量:用于存放地址的变量 指针变量指向的变量:以指针变量中的地 址作为存储地址的变量 指向:若将一个变量的地址赋值给某指针 变量(例如p=&a),简称p指向变量a。

指针变量与普通变量 定义指针变量 int *p , a; 将指针变量指向变量a p=&a; 通过指针变量p间接访问(引用)整型变量 a *p=4;/*间接访问*/ a = 6;/*直接访问*/
(3)希望指针变量不指向任何单元,可使用以 下三种形式之一: #define NULL 0 #include “stdio.h” main() {int *p; stdio.h中有预处理命令: #define NULL 0 p=0; p=NULL; } 推荐使用形式3
(4)在定义指针变量和引用指针变量时,都用 到了“*”号,二者的作用是不一样的。 int a,*p; p=&a; 定义指针变量的标志 *p=5;
–++*p (1)等价于++(*p),++是作用在(*p)上。 (2)i= ++*p; 先将(*p)的值加1,并将(*p)的值送入变量i 例如:short *p, a=3,i;/*假设&a为8b3a*/ p=&a;i=++*p; a=4 p=8b3a i=4
(5)关系运算 【作用】比较两个指针变量之间的位置关系。 【举例】 –if(p>q) printf(“p在q的后面\n”); else if(p= =q) printf(“pq指向同一位置\n”); else printf(“p在q的前面\n”);
符合C语言规定 的标识符,作为 变量名称使用

举例: int *pa; long *pl; float *pf; char *pc; (1)pa中只能存放int型变量的地址,即只 能指向int型的变量。 (2)pl只能指向long类型变量 (3)pf只能指向float类型变量 (4)pc只能指向char类型变量 (5)void *p;只能指向void类型
–(*p)++ (1)++是作用在(*p)上。 (2)i=(*p)++; 先将(*p)的值送入i中,然后(*p)加1 例如:short *p, a=3,i;/*假设&a为8b3a*/ p=&a;i=(*p)++; i=3 p=8b3a a=4
–*++p (1)等价于*(++p),++是作用在p上。 (2)i= *++p; 先将p的值加1,然后将(*p)送入变量i 例如:short *p, a=3,i;/*假设&a为8b3a*/ p=&a;i=*++p; a=3 p=8b3c i=不确定
……
字节数 2 4
……
3.5 内存
(2)使用指针变量 p=&f; 访问变量f的过程: (1)从指针变量p中读出 我们将这种先查地址,再 值(地址)。 通过地址找到变量的方式 (2)按照读出的地址,到 称为间接访问方式 相应的地址访问变量f
……
1 2
8b3a 8b3b 8b3c 9a01 9b3c 9b3d 9b3e 9b3f
第九章

指针
以字节为单位进 是C语言中的精华与难点 行编号(地址) 引入指针前变量的访问方式 (1)定义变量: 1 2 …… short a;char ch;float f; 8b3a 系统表 系统根据变量的类型,从内存 变量名 起始地址 字节数 中给变量分配相应字节的空间, a 8b3a 2 并记录变量名与内存起始地址 ch 9a01 1 之间的对应关系 f 9b3c 4

(3)注意问题: int a=3,*p=&a; *p=&a,a=3; int *p; float *p; float f=3.5; p=&f;

指针变量的引用 • 引用:通过指针变量间接访问其指向的变量 【一般形式】*指针变量名
引用运算符 代表该指针变量指向的变量 int *p,a; &a p p=&a; a=5; 直接访问方式 *p=7; 将p指向的变量赋值为7 间接访问方式 5 7 a
9b3c
…… ……
3.5
内存
说明: [1] 地址:内存各字节单元的编号。 [2]地址的表示: • 变量的地址:&变量名 • 数组的地址:数组名 • 数组元素的地址:&数组元素 [3]指针变量是C语言提供的专门用于存放地址 的变量。


指向:若一个指针变量中存放了某个变量(数 组、数组元素)的地址,我们称“指针变量指 向了某变量(数组、数组元素)”。例如: 1 float *p , f=3.5; 2 …… p=&f; 8b3a p 9b3c 8b3b 8b3c 指针变量p中存放f的地址 ……
指针变量的使用:先赋值(指向)、后引用 指针变量的赋值:将变量的地址赋给指针变量 (1)指针变量的初始化:定义的同时赋值 int a=3,*p=&a;/*p指向int型变量a*/ (2)使用赋值语句: int a,*p; p=&a; /*p指向int型变量a*/ (3)不使用scanf函数输入指针变量的值。
3.若定义:int a=511,*b=&a;则printf(“%d\n”, *b);的输出结果为( ) A、无确定值 B、a的地址 C、512 D、511
答案:D 注解:指针变量p指向变量a,则输出b所指向的单元的 值即是a的值。
引用运算符,只能作用于指针变量
(5)使用指针变量时需注意 int a,*p; p=?; 赋一个int型变量的地址
*p=?; 赋一个int型的数据
(6)int a,*p=&a; 区别以下概念: 指针: &a 指针变量: p 指针变量p指向的变量(*p): a
(7)举例 5 10 a main() {int a,*p; a=5; &a p p=&a; a=*p+5; printf(“a=%d *p=%d\n”,a,*p); } a=10 *p=10
01000001 9a01 ……
3.5
9b3c 9b3d 9b3e 9b3f
内存
9.1 指针的概念

引入指针后变量的访问方式 (1)定义变量: float f=3.5,*p; 变量名 p f
……
1 2
8b3a 8b3b 8b3c 9a01 9b3c 9b3d 9b3e 9b3f
Байду номын сангаас
系统表 起始地址 8b3a 9b3c

练习
1.有如下程序段 int *p,a=10,b=1; p=&a;a=*p+b; 执行该程序段后,a的值为( ) A、12 B、11 C、10 D、编译出错
答案:B 注解:指针变量p指向整型变量a,表达式*p+b即是表示 a+b,所以执行应该程序段后,a的值为11。
2.对于基类型相同的两个指针变量之间,不能 进行的运算是( ) A、< B、= C、+ D、答案:C
1 2
8b3a 8b3b 8b3c 9a01 9b3c 9b3d 9b3e 9b3f
9b3c
……
……
3.5
9.2 指针变量的定义及使用
指针变量同普通变量一样,必须先定义后使用 指针变量的定义: 指针变量的标志 【一般形式】类型名称 *变量名称;

规定该指针变量存放哪种类 型变量的地址,且只能存放 该类型变量的地址。可以是 任意类型。
例如:int *p=1000; Warning:Non-portable pointer assignment 说明 (1)指针变量只能赋地址值,不能赋其他类型 的数据。 (2)指针变量的使用顺序为 • 定义:int *p,a; int *p,a; *p=3; • 指向(赋值):p=&a; • 引用:*p=3; Warning:Possible use Of „p‟ before defination in
• 指针变量算术运算的结果 例如 short *p,a,*q,n; a p=q=&a; p 8b3a 8b40 8b3c p++; p=p+2; n=p-q; q 8b3a n 3
……
1 2
8b3a 8b3b 8b3c 8b3d 8b3e 8b3f 8b40 8b41 8b42 8b43 8b44
…… ……
8b3b 8b3c
9a01 9b3c 9b3d 9b3e 9b3f
内存
以字节为单位进 行编号(地址) (2)使用变量 a=3; ch=„A‟; f=3.5; 我们将这种通过变量名来使 用变量的方式称为直接访问 方式
1 2
8b3c
……
00000101 8b3a 00000000 8b3b
……
与指针变量指向的具体类型有关 • 指针变量算术运算总结: (1)指针变量±n(n为整型数据):并不是 简单的将指针变量中的地址值±n,而是: 原地址值 ± n*sizeof(指向类型) (2)指针变量1-指针变量2(应为同类型指 针变量):并不是简单的相减,而是: (地址值1-地址值2)÷sizeof(指向类型)
相关文档
最新文档