指针初始化有几种方式:指针对象可以被一个具有相同类型的对象初始化。下面的例子将整型指针ip赋给另一整型指针ip2:int*ip2=ip;此时,这两个指针指向同一内存空间,可用图1.8表示。图1.8指针与指针所指对象如果程序员想强制赋给指针另一种类型变量的地址,则必须显式进行类型转换。如要将一个整型指针的值赋给浮点数指针,可以采用以下语句:float*fp=ip;通过直接分配内存地址得到初值。......
2023-11-07
数组是具有相同数据类型的元素组成的集合。在内存中,它占据一组连续的内存空间。数组的每一项都是一个变量,称为数组元素。每个元素的存取是通过数组名加偏移量来实现的。实际上,数组是一组相关的内存位置,它们都具有相同的名字和类型。为了引用数组中的特定位置或元素,需指定数组名和数组中特定元素的位置编号。
数组是程序设计语言中常用的数据结构之一。当若干数据具有相同的数据类型并且互相有一定关系时,把它们组织成数组非常有效。
和其他变量一样,在使用数组之前需要对数组进行定义。数组分为一维数组、二维数组和三维及以上的数组,通常把二维数组称为矩阵,三维及以上的数组称为多维数组。下面以一维数组为例说明数组的用法。
一维数组的定义格式如下:
类型数组名[常量表达式];
其中,“类型”指出数组元素的数据类型,“数组名”指出数组的名字,“常量表达式”指出一维数组中存储的元素个数。
例如,以下语句定义了一个具有5个元素的整型数组arr:
int arr[5];
对数组中某一个元素是通过数组名加下标访问的,也就是说,在数组名字后面的方括号内([])加入特定元素的位置编号,就可以引用这些元素中任何一个。如arr[0]是数组的第一个元素,arr[1]是数组的第二个元素,arr[4]是数组的最后一个元素,如图1.6所示。注意,数组的下标从0开始,因而一个具有n个元素的数组A,其有效元素为A[0]~A[n-1]。
一维数组在内存中的存放顺序如图1.6所示。
图1.6 一维数组存储结构图(www.chuimin.cn)
数组可在定义时初始化,其格式为:
类型数组名[数组范围]={值1,值2,…,值n};
初始化值的个数可以小于或等于数组定义的元素个数,但不可以多于元素个数(这将导致语法错误),对于全局或static存储类别(指定静态数组)的数组不足部分的数组元素系统自动以0值填充。如果在初始化数组的语句内忽略了数组大小,则数组元素个数就是初始化值的个数。以下初始化形式是合法的:
字符数组(每个元素均为单个字符)可以用多个字符或一个字符串初始化,需要注意的是,字符串以空字符NULL('\0')结尾,因而也占据一个数组元素的位置。以下是一些字符串数组的例子:
C++不支持数组之间的直接赋值,因而只能一个一个元素地赋值。如要将一个大小为20的数组A赋给另一个同样大小的数组B,可以利用循环进行:
for(i=0;i<20;i++)B[i]=A[i];
字符串(字符数组)的赋值可以利用预定义的字符串操作函数如strcpy()等实现,这可以参考相应的语言手册。
【例1.18】编写一个程序,从键盘输入10个学生的成绩,统计最高分、最低分和平均分。
解:利用一维数组Arry存储学生的成绩,然后用for循环进行求值。程序如下:
有关C++程序设计基础教程的文章
指针初始化有几种方式:指针对象可以被一个具有相同类型的对象初始化。下面的例子将整型指针ip赋给另一整型指针ip2:int*ip2=ip;此时,这两个指针指向同一内存空间,可用图1.8表示。图1.8指针与指针所指对象如果程序员想强制赋给指针另一种类型变量的地址,则必须显式进行类型转换。如要将一个整型指针的值赋给浮点数指针,可以采用以下语句:float*fp=ip;通过直接分配内存地址得到初值。......
2023-11-07
在C++中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。实际上,数组下标表示法在编译期间将转换为指针表示法,所以用指针方式来书写数组下标表达式可以节省编译时间。如果再定义一个字符指针:char*pname=name;则name[i]、*和*具有相同的值,都是数组第i+1个元素的值。分析以下程序的执行结果。......
2023-11-07
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
程序的执行结果如下:Point复制构造函数被调用Point复制构造函数被调用Point复制构造函数被调用Point复制构造函数被调用Distance构造函数被调用(1,2)和(8,6)两个点的距离:8.06226......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。其他函数不能访问该类的保护数据成员,也不能调用该类的保护成员函数。◇一旦给出了成员访问限定符,它后面的成员都具有这个成员访问权限,直到出现另一个成员访问限定符或类声明结束为止。类的成员函数可以访问类的所有成员,没有任何限制,而类的对象对类的成员的访问是受成员访问控制符制约的。......
2023-11-07
C++的标准输入/输出流库用于数据的输入/输出,用于输入/输出的流库包含在头文件iostream.h中。表1.4常用的输入/输出流操纵符显示常数使用cout可以显示字符串和数字,并可显示多个值。因此,用户输入数据时要避免输入的数据超出指定变量的值域。程序的执行结果如下:注意:使用cin输入一个字符串时,其中不能含有空格,否则,cin认为输入结束。......
2023-11-07
多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。按照绑定进行阶段的不同,可以分为两种不同的绑定方法:静态绑定和动态绑定,这两种绑定过程中分别对应着多态的两种实现方式。有些多态类型,其同名操作的具体对象能够在编译、连接阶段确定,通过静态绑定解决,比如重载、强制和参数多态。包含多态操作对象的确定就是通过动态绑定完成的。分析以下程序的执行结果。......
2023-11-07
相关推荐