面向对象程序设计第8讲二维指针结构体-文档资料
计算机二级考试公共基础知识点:面向对象的程序设计.doc
计算机二级考试公共基础知识点:面向对象的程序设计2018年计算机二级考试公共基础知识点:面向对象的程序设计考点2面向对象方法的基本概念考试链接:考点2在笔试考试中,是一个经常考查的内容,在笔试考试中出现的几率为70%,主要是以填空题的形式出现,分值为2分,此考点为重点识记内容,读者应该识记几个基本要素的定义、对象的特征以及消息、继承、类的定义。
误区警示:当使用对象这个术语时,既可以指一个具体的对象,也可以泛指一般的对象,但是当使用实例这个术语时,必须是指一个具体的对象。
面向对象方法涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。
(1)对象通常把对对象的操作也称为方法或服务。
属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。
属性值应该指的是纯粹的数据值,而不能指对象。
操作描述了对象执行的功能,若通过信息的传递,还可以为其他对象使用。
对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。
(2)类和实例类是具有共同属性、共同方法的对象的集合。
它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。
类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作。
(3)消息消息是实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。
一个消息由三部分组成:接收消息的对象的名称、消息标识符(消息名)和零个或多个参数。
(4)继承广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。
继承分为单继承与多重继承。
单继承是指,一个类只允许有一个父类,即类等级为树形结构。
多重继承是指,一个类允许有多个父类。
(5)多态性对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行动,该现象称为多态性。
疑难解答:能举一下现实中的对象及其属性和操作吗?一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号等)及其操作(如启动、刹车等)。
第8章面向对象的程序设计语言VBAppt.
描述
表8-2 比较运算符
符号
= <> < > 等于 不等于 小于 s
小于等于
大于等于 对象引用比较
表8-3 逻辑运算符
符号
Not And Or Xor Eqv Imp 逻辑非 逻辑与 逻辑或 逻辑异或 逻辑等价 逻辑隐含
描述
表8-4 连接运算符
符号 +或 & 描述 字符串连接
• 8.2.2 数据类型 • VBA语言的数据类型包括布尔型、日期型、字符串、货 币型、字节型、整数型、长整型、单精度型、双精度型、 变体型以及用户自定义型,通过“Dim As”语句来定义 数据类型。 • (1)布尔型(Boolean):在VBA语言中占用2个字节, 取值可以为True或False。声明方式如下: • Dim abc As Boolean • (2)日期型(Date):占用8个字节,可以用来表示日 期和时间。为日期类型赋值时要加上“#”分隔符,声明 方式如下: • Dim date As Date • date=#10/23/2007# • (3)字符串型(String):用来表示一定长度的文本, 声明方式如下: • Dim str As String • Str="我是中国人"
• 2. 过程 • Sub过程以关键字Sub开始,以End Sub结束,不返 回任何值。过程的语法结构如下: • Sub 过程名称() • 声明变量 • 基本语句 • End Sub • 过程可以有参数,可以在调用该过程时指定参数,控 制相应的功能。过程可以分为通用过程和事件过程两 种。事件过程是针对对象的一个事件的发生而设计的, 一般系统会自动设计好固定的事件过程名称。事件过 程一般是附加在窗体、报表和相应控件中的,由相应 的事件触发。
结构体二级指针
结构体二级指针
摘要:
1.结构体二级指针的定义
2.结构体二级指针的应用
3.结构体二级指针的注意事项
正文:
一、结构体二级指针的定义
结构体二级指针是指向结构体类型变量的指针,它本身也是一个指针类型。
结构体是一种复合数据类型,可以包含多个不同类型的成员变量。
结构体二级指针可以用来访问结构体变量中的成员,从而实现对结构体变量的操作。
二、结构体二级指针的应用
结构体二级指针在实际编程中应用广泛,主要体现在以下几个方面:
1.动态内存分配:结构体二级指针可以用来动态分配内存,从而实现对结构体变量的动态创建和删除。
2.传递参数:结构体二级指针可以作为函数参数传递,实现对结构体变量的共享和修改。
3.数组操作:结构体二级指针可以用来操作结构体数组,实现对结构体数组的遍历和访问。
三、结构体二级指针的注意事项
在使用结构体二级指针时,需要注意以下几点:
1.指针类型匹配:结构体二级指针必须指向与之类型匹配的结构体变量,否则会导致程序错误。
2.访问成员的权限:结构体二级指针只能访问结构体变量中公开的成员,不能访问私有成员。
3.内存管理:使用结构体二级指针时,需要手动管理内存,确保不会出现内存泄漏问题。
c语言二级指针详解
c语言二级指针详解C语言中,指针是一种重要的数据类型,它可以指向另一个变量或者数据结构中的一个元素,并且可以进行不同种类的操作(如解引用、赋值、比较、运算等)。
在C语言中,指针本身也是一个变量,它具有一个内存地址,并且其值就是指向的地址。
而指针变量可以通过指定自己的类型来控制指向的变量或者数据结构元素的类型。
在C语言中,指针本身也可以被指针所指向,这样的指针就被称为“二级指针”或者“指向指针的指针”。
二级指针在一些情况下比普通指针更加灵活,比如当我们需要在函数内部进行指针变量的修改或者返回值时,就可以使用二级指针。
1、指向指针的指针需要使用两个星号(**)来声明,例如:int **p;2、在函数中传递指向指针的指针时,需要将变量的地址传递给函数,而函数需要使用指向指针的指针来访问实际的指针变量。
3、在使用二级指针时,我们需要防止指针变量指向非法内存地址,否则会导致程序出现意想不到的错误。
二级指针是C语言中非常重要的概念,尤其在函数调用和指针变量的修改或返回值时,更是非常有用。
不过,我们在使用二级指针时需要额外注意指向内存地址的合法性,否则会导致程序出现异常。
二级指针是指指向指针对象的指针,即指针的指针,它可以通过间接的方式访问一个指针变量所指向的地址,这种间接的访问方式可以增加程序的灵活性,从而使程序更加易于理解和维护。
1、动态内存管理在C语言中,动态内存分配是通过调用malloc函数来实现的,而释放动态内存则需要使用free函数。
在使用malloc函数分配内存时,它会返回一个指针,指向分配的内存空间的首地址,我们可以将这个指针赋值给一个普通的指针变量,然后通过这个普通指针变量来访问分配的内存空间。
不过,当我们使用malloc来分配一个指针数组时,我们就需要使用二级指针来存储这个指针数组的首地址。
int **p = (int **)malloc(sizeof(int *) * 10);for (int i = 0; i < 10; ++i) {p[i] = (int *)malloc(sizeof(int) * 10);}以上代码中,我们使用了二级指针来存储指向指针数组的地址,然后使用循环语句来为每一个指针分配空间。
面向对象程序设计
面向对象程序设计面向对象程序设计(Object-Oriented Programming,简称OOP)是一种编程范式,它使用“对象”来设计软件。
对象可以包含数据(通常称为属性)和代码(通常称为方法或函数)。
面向对象程序设计的核心概念包括封装、继承、多态和抽象。
封装封装是将数据(属性)和操作这些数据的方法(行为)绑定在一起的过程。
封装的目的是隐藏对象的内部状态和实现细节,只暴露出一个可以被外界访问的接口。
这样,对象的使用者不需要了解对象内部的复杂性,只需要通过公共接口与对象交互。
继承继承是一种机制,允许新创建的类(子类)继承现有类(父类)的属性和方法。
这使得代码重用变得可能,同时也支持层次结构的创建。
子类可以扩展或修改父类的行为,但通常保持父类的大部分功能。
多态多态性是指允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。
在面向对象编程中,多态性通常是通过方法重载(同一个类中多个同名方法,参数不同)和方法重写(子类重写父类的方法)实现的。
抽象抽象是简化复杂的现实世界问题的过程,只关注对于当前目标重要的方面,忽略不相关的细节。
在面向对象编程中,抽象通常是通过创建抽象类和接口来实现的。
抽象类可以包含抽象方法,这些方法没有具体的实现,必须由子类提供。
类和对象类是创建对象的蓝图或模板,定义了对象的结构和行为。
对象是根据类创建的实例,具有类定义的属性和方法。
每个对象都是唯一的,即使它们是同一个类的实例。
面向对象设计原则在面向对象设计中,有几个关键的设计原则,如单一职责原则、开放-封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则等。
这些原则帮助开发者创建灵活、可维护和可扩展的系统。
面向对象的优势- 代码重用:通过继承和多态性,可以减少代码重复。
- 易于维护:封装和抽象使得修改系统的一部分不会影响其他部分。
- 模块化:系统被分解为独立的模块,每个模块负责特定的功能。
- 可扩展性:系统可以容易地扩展新功能,而不需要重写现有代码。
结构体二级指针
结构体二级指针摘要:1.结构体二级指针的概念2.结构体二级指针的声明与初始化3.结构体二级指针的访问与操作4.结构体二级指针的应用场景5.使用结构体二级指针的注意事项正文:结构体二级指针是一种指针类型,它指向一个结构体的内存地址,该结构体又包含一个指针类型的成员变量。
这种指针类型在处理复杂数据结构时非常有用,比如链表、树、图等。
下面我们详细了解一下结构体二级指针的概念、声明与初始化、访问与操作、应用场景以及注意事项。
1.结构体二级指针的概念结构体二级指针是一种特殊的指针类型,它指向一个结构体的内存地址,而该结构体又包含一个指针类型的成员变量。
这种指针类型在处理复杂数据结构时非常有用,比如链表、树、图等。
2.结构体二级指针的声明与初始化结构体二级指针的声明和初始化与普通指针类似,只需在声明时指定结构体的类型,并在初始化时为其赋值。
例如:```cstruct Node *node_ptr;ode_ptr = (struct Node *)malloc(sizeof(struct Node));```这里,`struct Node`是一个结构体类型,`node_ptr`是一个指向`struct Node`类型的二级指针。
3.结构体二级指针的访问与操作结构体二级指针的访问和操作与普通指针类似,可以使用解引用操作符`*`来访问其指向的结构体,然后通过该结构体的成员指针访问二级指针所指向的内存地址。
例如:```cstruct Node {int data;struct Node *next;};struct Node *node_ptr;ode_ptr = (struct Node *)malloc(sizeof(struct Node));ode_ptr->data = 1;ode_ptr->next = (struct Node *)malloc(sizeof(struct Node));ode_ptr->next->data = 2;ode_ptr->next->next = NULL;```4.结构体二级指针的应用场景结构体二级指针在处理复杂数据结构时非常有用,比如链表、树、图等。
四川大学《c语言程序设计》课件-第8章 结构体与共用体
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
第8章 指针2-xujh
指针数组与命令行参数
• 在操作系统命令状态下可以输入程序或命 令使其运行,称命令行状态。输入的命令 (或运行程序)及该命令(或程序)所需 的参数称为命令行参数
*(a[0]+1) *(*(a+0)+1)
a+1
对于二维数组: (1)a是数组名, 包含三个元素 a[0],a[1],a[2] (2)每个元素a[i] 又是一个一维 数组,包含4个 元素
a+2
2016 a[2]
a[2][2]
a[2][3]
int a[3][4];
a
2000 2000
a[0]
a+12008
指针数组
• •
指针数组是指针变量的集合 定义形式:类型标识符 *数组名[数组长 度说明]
– 如: int *p[10];
•
注意事项:
– 字符数组中每个元素可存放一个字符,而字符 指针变量存放字符串首地址,千万不要认为字 符串是存放在字符指针变量中的 – 对字符数组而言,与普通数组一样,不能对其 进行整体赋值,只能给各个元素赋值,而字符 指针变量可以直接用字符串常量赋值
P[0] P[1] P[2]
B A S I C \0 C + + \0 P A S C A L \0
字符指针数组举例(1)
• • • • • • • • • • • • • 例:有若干本书,将书名按字典顺序排序 #include<stdio.h> #include<string.h> main() { char *bname[ ]={"Programming in ANSI C","BASIC","Visual C++ 6.0 Programming ","TRUBO C 2.0"}; int i,m; void sort(char *name[],int); m=sizeof(bname)/sizeof(char *); /*字符串个数*/ sort(bname,m); /* 排序,改变指针的连接关系*/ printf("\n"); for (i=0;i<m;i++) /* 输出排序结果*/ printf("%8s",bname[i]); }
c语言二维数组和二级指针
c语言二维数组和二级指针C语言中的二维数组和二级指针是非常重要的概念,它们在程序设计中扮演着重要的角色。
本文将详细介绍二维数组和二级指针的定义、使用方法以及它们之间的关系。
一、二维数组的定义和使用二维数组是指由多个一维数组组成的数组。
它可以理解为一个表格,其中每个元素都有两个下标来确定其位置。
在C语言中,我们可以使用以下方式来定义一个二维数组:```数据类型数组名[行数][列数];```例如,我们可以定义一个3行4列的整型二维数组:```int matrix[3][4];```我们可以通过下标来访问二维数组中的元素,例如,`matrix[1][2]`表示第2行第3列的元素。
同样,我们也可以使用循环结构来遍历二维数组中的所有元素。
二、二级指针的定义和使用二级指针是指指向指针的指针。
它本质上是一个存储了指针地址的变量,可以用来存储指针的地址。
在C语言中,我们可以使用以下方式来定义一个二级指针:```数据类型 **指针名;```例如,我们可以定义一个指向整型指针的二级指针:```int **ptr;```通过二级指针,我们可以动态地创建二维数组。
首先,我们需要使用一级指针来动态分配内存空间,然后使用二级指针来指向这块内存空间。
例如,我们可以使用以下代码来创建一个3行4列的动态二维数组:```int **matrix;matrix = (int **)malloc(3 * sizeof(int *));for (int i = 0; i < 3; i++) {matrix[i] = (int *)malloc(4 * sizeof(int));}```通过二级指针,我们可以通过`matrix[i][j]`来访问动态二维数组中的元素。
三、二维数组和二级指针的关系二维数组和二级指针在某种程度上可以互相转换。
我们可以将二维数组的首地址赋给二级指针,也可以将二级指针赋给二维数组的首地址。
这样做的目的是为了方便在函数中传递二维数组的指针。
C语言程序设计立体化教程课件:指针与二维数组和指针的指针
scanf("%d",&i);
if(i<0)
exit(1);ps=namFra bibliotek+i;
//为ps赋值
printf("Day No:%2d-->%s\n",i,*ps); //输出
}
应用说明
name是一个指针数组,它的每一个 元素是一个指针型数据,其值为地址。 name是一个数组,它的每一个元素 都有相应的地址。数组名name代表 该指针数组的首地址。其中当i=1时, name[i]是"Monday"的首地址, ps=name+i是name[i]的地址,所以 ps就是指向指针型数据的指针变量。 输出时的“*ps”表示*(name+i), 即name[i]。
阅读代码 输出二维数组有关值
#include <stdio.h> main( ) { int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; printf("%d,",a); //第0行首地址 printf("%d,",a[0]); //第0行0列地址 printf("%d\n",&a[0][0]); //第0行0列地址 printf("%d,",a+1); //第1行首地址 printf("%d,",*(a+1)); //第1行0列地址 printf("%d,",&a[1]); printf("%d\n",&a[1][0]); }
{
static char *name[]={ "Illegal day",
面向对象程序设计第8讲二维指针结构体-文档资料28页
多维数组及数组应用
赵红
2019/11/6
作业
2
写出程序运行结果。
用行指针操作二维数组,找出最大值。
void main()
本周上 { int a[2][3]={1,2,9,4,5,6}; 机测试 cout<<print(a,2,3)<<endl;
} P167自测题7.5
结构体
P164例7.5
指针数组就是数组中的每个元素均
1. 指针数组的定义 为指针类型
指针数组定义的一般形式:
数据类型标识符 *数组名[元素个数];
在这个定义中由于“[ ]”比“*”的优先级高,所 以数组名先与“[元素个数]”结合,形成数组的定义 形式,“*”表示数组中每个元素是指针类型,“数据类 型标识符”说明指针的目标变量的数据类型。例如:
2019/11/6
20
用sizeof运算符计算结构体变量所占内存空间
sizeof(date)
struct date { int year,month,day;}; num
8个字节
struct student
name
30个字节
{ char num[8];
sex
1个字节
char name[30];
}
2019/11/6
作业:
15
1、读P160例7.4
2、求一个2行3列的二维数组的转置数组。
3、有一个N×M矩阵,编程序求出其中最大 的那个元素的值及其所在的行、列位置。
• 4、从键盘接收数据并存入数组a[10],并调 用函数sort(a,n)对其进行排序,在主程序中 输出结果。(排序方法不限)
12
二维结构体数组定义和使用
二维结构体数组定义和使用二维结构体数组是C语言中常用的数据结构,用于存储和处理二维数据。
在本文中,我们将介绍二维结构体数组的定义和使用方法,并通过一个实际的例子来说明其应用。
我们需要了解什么是结构体。
结构体是一种自定义的数据类型,可以包含多个不同类型的成员变量。
通过结构体,我们可以将相关的数据组织在一起,方便管理和使用。
在C语言中,我们可以使用结构体数组来存储多个结构体对象。
而二维结构体数组则是在此基础上增加了一个维度,可以存储多行多列的结构体对象。
下面是一个简单的例子,演示了如何定义和使用二维结构体数组:```c#include <stdio.h>// 定义一个学生结构体struct Student {char name[20];int age;};int main() {// 定义一个二维结构体数组,存储3个学生的信息 struct Student students[3][2];// 输入学生信息for (int i = 0; i < 3; i++) {printf("请输入第%d个学生的信息:\n", i + 1); for (int j = 0; j < 2; j++) {printf("姓名:");scanf("%s", students[i][j].name);printf("年龄:");scanf("%d", &students[i][j].age);}}// 输出学生信息for (int i = 0; i < 3; i++) {printf("第%d个学生的信息:\n", i + 1);for (int j = 0; j < 2; j++) {printf("姓名:%s\n", students[i][j].name);printf("年龄:%d\n", students[i][j].age);}}return 0;}```在上面的例子中,我们定义了一个名为`Student`的结构体,包含了一个字符串类型的`name`成员变量和一个整型的`age`成员变量。
二级指针C语言程序设计
指针数组和二级指针指针的指针:指向指针变量的指针变量。
指针的指针存放的是指针变量地址。
(二级指针)指针的指针的定义格式:类型**指针变量名;p2 p1 i&p1&i2int i=2;/*定义整型变量i*/int*p1,**p2; /* 定义p1为整型指针,定义p2为整型指针的指针*/ p1=&i; /* i的地址=>p1,即指针p1指向变量i*/p2=&p1; /* 指针p1的地址=>p2,即指针p2指向指针p1 */对变量i的访问i,*p1,**p2。
指针数组和二级指针例使用指向指针的指针。
/*二级指针应用*/#include<stdio.h>int main(){ char *name[ ]={"Book","Cell Phone", "Table","Program","Computer"};/*定义指针数组,并用字符串为其初始化*/ char **p;int i;for(i=0;i<5;i++){ p=name+i; /*二级指针指向指针数组*/ printf("%s\n",*p); }return 0;}例:一个指针数组的元素指向整型数据。
#include <stdio.h>int main( ){ int a[5]={1,3,5,7,9};int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; int **p, i;p=num;for(i=0;i<5;i++){ printf(“%5d”,**p);p++;}return 0; }13579 int a[5]int *num[5]&a[0]&a[1]&a[2]&a[3]&a[4] int **pp++指针数组和二级指针指针数组和二级指针指针与数组的等价性--数组名代表起始地址●一个一维数组和一个指针等价,都代表地址,都可以访问数组中的所有元素;int a[10]与指针int*pa●一个二维数组,可以看成是一个一维数组,每个元素又是个一维数组;int a[3][4]与int a[3]={a[0],a[1],a[2]}●一个指针数组,指向二维数组的每一行,指针数组的数组元素是指针,所以指向指针数组的指针就是指针的指针。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.7 指针与数组
10.7 指针数组
1. 指针数组的定义
为指针类型
10
指针数组就是数组中的每个元素均
指针数组定义的一般形式: 数据类型标识符 *数组名[元素个数];
在这个定义中由于“[ ]”比“ *”的优先级高,所 以数组名先与“[元素个数]”结合,形成数组的定义 形式,“*”表示数组中每个元素是指针类型,“数据类 型标识符”说明指针的目标变量的数据类型。例如:
int *ip[10]; char *cp[5];
2019/3/6
11
例如:P191 char c[4][8]={"Fortran","COBOL","BASIC","Pascal "}; char *cp[4]={c[0],c[1],c[2],c[3]}; char *str[5]={"int","long","char","float","double"}; str[0] cp cp[0] str[1] cp[1] str[2] cp[2] str[3] str[4] cp[3] C i 数 n 组 t \0 n \0 \0 \0 t\0 \0 l l e\0 \0
lp 0 lp 10 2. 二维数组的指针 lp 20 lp 【例10.6】用指向一维数组的指针变量输出数组元素。 a 1 11 21 2 12 22
9
3 13 23
#include <iostream.h> void main( ) { int a[3][4]={{0,1,2,3},{10,11,12,13},{20,21,22,23}}; int (*lp)[4], j; for (lp=a; lp<a+3; lp++) 0 1 2 3 { for (j=0; j<4; j++) 10 11 12 13 cout<<*(*lp+j)<<" "; cout<<endl; 20 21 22 23 }
2019/3/6
10.3 指向数组的指针
指向一维数组的指针变量的定义形式: 数据类型标识符 (*变量名)[元素个数] int x[2][3]={{0,1,2},{10,11,12}}; int (*lp)[3],*q; lp 2000H q lp=x; 2019H q q=x[0]; 2019
H
8
x[1]---- x[1][0],x[1][1],x[1][2]
x[1]是数组名, 是元素x[1][0]的地址
2019/3/6
10.3 指针与数组
10.3.1 指向数组的指针
2. 二维数组的指针
a a[0] a+1 a[1] a+2 a[2]
a
5
0 10 20
1 11 21
2 12 22
ห้องสมุดไป่ตู้3 13 23
1
多维数组及数组应用
赵红
2019/3/6
作业
写出程序运行结果。 用行指针操作二维数组,找出最大值。 void main() { int a[2][3]={1,2,9,4,5,6}; cout<<print(a,2,3)<<endl; } P167自测题7.5 P164例7.5
2
本周上 机测试 结构体
2019/3/6
F a l o o r n t g r \0 C c O h Ba O r L B f A l So I a C d a o su c b a P
8.3 指针与函数
8.3.3 指针变量作函数参数
2. 数组的指针作函数参数
12
⑵ 二维数组的指针作函数参数 二维数组的行指针作函数参数 例如被调函数abc的定义形式有以下三种: void abc(int b[2][4]) { …… } void abc(int b[ ][4]) { …… } void abc(int (*b)[4]) { …… } 在主调函数有如下定义: int a[2][4], (*p)[4]=a; 则调用abc函数时可用 abc(a) 或 abc(p)
2019/3/6
10.3 指针与数组
10.3.1 指向数组的指针
2. 二维数组的指针
0 a[1]数组 10 a[2]数组 20
a[0]数组 a[0]+1 a[0]+2 a[0]+3
6
1 11 21
2 12 22
3 13 23
⑵ 二维数组元素的地址 a[2]+1 a[2]+2 a[2]+3 a[0]、a[1]、a[2]是一维数组名, 所以a[i]+j是数组元素的地址。 数组元素a[i][j]的地址可以表示为下列形式: &a[i][j]、a[i]+j 、*(a+i)+j
lp++; q++;
lp
200cH
2019H
2019H
x[0][0] x[0][1] x[0][2] x[1][0] x[1][1] x[1][2]
2019/3/6
cannot convert from 'int [2][3]' to 'int *'
10.3 指针与数组
10.3.1 指向数组的指针
3
s1<s2
思考:若有语句 if (s1= =s2) printf("s1=s2");比较的是什么?
2019/3/6
二维数组可看作是一种特殊的一维数组
4
例如,可以把x数组看作是包含二个元素的一维数组, 每个元素又是一个含有三个元素一维数组。 x为行指针,x[0]为元素指针 x[0]---- x[0][0],x[0][1],x[0][2] x[0]是数组名,是元素x[0][0]的地址
2019/3/6
例如:比较两个字符串的大小。写出运算结果
#include <iostream.h> #include <string.h> void main( ) { char s1[ ]= "aBC",s2[ ]= "abc"; if (strcmp(s1,s2)==0) cout<<"s1=s2"; else if (strcmp(s1,s2)>0) cout<<"s1>s2"; else cout<<"s1<s2"; } 程序输出结果:
⑴ 二维数组的地址 例如:int a[3][4]; ① 二维数组名a是数组的首地址。 ② 二维数组a包含三个行元素:a[0]、a[1]、a[2] 。
三个行元素的地址分别是:a、a+1、a+2。 而a[0]、a[1]、a[2]也是地址量,是一维数组名, 即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。