C++基础知识(三)

数组

数组的意义与性质

  • 数组的定义
    定义格式:元素类型 数组名称[常数表达式]
    示例:int a[8]; // 定义包含8个整数元素的数组
  • 特别说明
    常数表达式必须是常数和常量,不允许为变量
    错误示例:int count = 8; int c[count];
    数组元素编号从0开始计数,元素访问格式为a[0]、a[1]、…
    不允许对数组进行整体赋值操作,只能使用循环逐一复制元素
    错误示例三:int a[8], b[8]; a=b;
  • 意义与性质
    将相同性质的数据元素组织成整体,构成单一维度上的数据序列

数组的地址

数组的基地址:数组开始存储的物理位置
数组首元素的基地址:数组首个元素开始存储的物理地址,数值上总是与数组基地址相同
“&”操作符:&a获得数组的基地址;&a[0]获得数组首元素的基地址
设数组基地址为p,并设每个元素的存储空间为m,则第i个元素的基地址为p+mi

数组元素的初始化

  • 基本初始化格式
    定义格式:元素类型 数组名称[元素个数] = {值1,值2,值3,…};
    示例:int a[8] = {1, 2, 3, 4, 5, 6,7,8};
    int a[8] = {,6,7,8};
  • 初始化时省略元素个数表达式
    在全部元素均初始化时可以不写元素个数,使用sizeof操作符可以获得元素个数
    示例二:int a[] = {1, 2, 3, 4, 5,6,7,8};
    int num_of_elements = sizeof(a)/sizeof(a[0]);
    sizeof(a)获取数据存储空间大小(以字节为单位),sizeof(a[0])获取数组首元素的存储空间大小

数组与函数

  • 数组元素作为函数实际参数
    int Add(int x, int y){return (x+y);}
    int a[2]={1,2}, sum;
    sum = Add(a[0], a[1]);
  • 数组整体作为函数形式参数
    基本格式:返回值类型 函数名称(元素类型 数组名称[], 元素个数类型 元素个数)
    示例:void GenerateIntegers(int a[], unsigned int n);
    特别声明:作为函数形式参数时,数组名称后的中括号内不需要写元素个数,必须使用单独的参数传递元素个数信息。a[]数组既是输入的一部分也是输出的一部分(简单理解为按地址传递)。

多维数组

  • 多维数组的定义
    定义格式:元素类型 数组名称[常数表达式1][常数表达式2]…
    示例一:int a[2][2]; //2x2个整数元素的二维数组
    示例二:int b[2][3][4]; //2x3x4个整数元素数组
    特别说明:同单维数组
  • 多维数组的初始化
    与一维数组类似:int a[2][3] = {1, 2, 3, 4, 5, 6}
    单独初始化每一维:int a[2][3] = {{1, 2, 3}, {4, 5, 6}}

结构体

  • 结构体的意义与性质
    与数组的最大差别:不同类型数据对象构成的集合,当然也可以为相同类型的但具体意义或解释不同的数据对象集合

  • 结构体类型的定义:注意类型定义后面的分号
    struct 结构体名称
    {
    成员类型1 成员名称1;
    成员类型2 成员名称2;

    成员类型n 成员名称n;
    };

  • 结构体类型示例
    示例一:日期结构体

    struct DATE
    {
    	int year;
    	int month;
    	int day;
    };
    
  • 结构体类型的声明
    仅仅引入结构体类型的名称,而没有给出具体定义,其具体定义在其他头文件中或本文件后续位置
    struct COMPLEX;

  • 结构体数据对象的访问

  1. 结构体类型的变量与常量:按普量通格式定义
    示例一:DATE date;
    示例二:STUDENT zhang_san;
    示例三:STUDENT students[8];

  2. 结构体量的初始化
    示例四:DATE date={2008, 8, 8};

  3. 结构体量的赋值
    与数组不同,结构体量可直接复制,拷贝过程为逐成员一一复制
    示例五:DATE new_date; new_date=date;

  4. 结构体量成员的访问
    使用点号操作符"."解析结构体量的某个特定成员
    示例一:DATE date;date.year=2008;date.month=8;date.day=9;

  5. 嵌套结构体成员的访问
    可以连续使用点号逐层解析
    示例二:

    struct FRIEND
    {
    	int id;
    	STRING name;
    	DATE birthday;
    };
    FRIEND friend;
    friend.birthday.year = 1988;
    
  6. 复杂结构体成员的访问
    严格按照语法规则进行
    示例三:

    FRIEND friends[4];
    friends[0].birthday.year=1988;
    
  7. 结构体与函数
    编写一函数,使用结构体类型存储日期,并返回该日在该年的第几天信息,具体天数从1开始,例如2016年1月20日返回20,2月1日返回32

    unsigned int GetDateCount(Date date)
    {
    	static unsigned int days_of_months[13]=
    	{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	unsigned int i, date_id = 0;
    	for(i=1, i<date.month;i++)
    	{
    		date_id += days_of_months[i];
    	}
    	date_id += date.day;
    	if(date.month > 2 && IsLeap(date.year))
    		date_id++;
    	return date_id;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值