博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后台开发:核心技术与应用实践1.3 数组
阅读量:6605 次
发布时间:2019-06-24

本文共 1697 字,大约阅读时间需要 5 分钟。

1.3 数组

1.?数组的定义

数组是相同类型数据的集合。引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系。许多好的算法都与数组有关。熟练地利用数组,可以大大地提高编程的效率,加强程序的可读性。例1.5展示了数组的使用方法。

【例1.5】 一维数组与二维数组使用举例。

#include<iostream>

using namespace std;

int main(){

    int a[10]={1,2,3,4,5,6,7,8,9,10};

                            // 数组a,类型为int整型,有10个元素,是一个一维数组

    int i,j;

    for(i=0;i<10;i++){         // 从a[0]~a[9]

        cout<<a[i]<<" ";

    }

    cout<<endl;

    int b[2][2]={1,2,3,4};    // 数组b,类型为int,有4 元素,是一个二维数组

    for(i=0;i<2;i++){

        for(j=0;j<2;j++){

            cout<<b[i][j]<<" ";

    }

    cout<<endl;

    }

    return 0;

}

程序的执行结果是:

1 2 3 4 5 6 7 8 9

1 2

3 4

例1.5中数组a是一个一维数组,有一个下标;数组b是一个二维数组,有两个下标。

一个数组在内存中占用的存储单元是连续的,也就是说一个数组在内存中占用一片连续的存储单元。在32位的机器上,一个int类型的值占4Byte,如果a[0]的地址是2000,那么a[1]的地址就是2004,a[2]的地址就是2008,a[3]的地址就是2012……如此类推。这里的“地址”,大家可以简单理解为在内存中的一个标识,详细内容会在本章的1.4节中进行介绍。

2.?字符数组

字符数组,就是一个用来存放字符数据的数组,示例如下:

char str[10]="Book";

其中,str就是一个字符数组,并且str[0]='B',str[1]='o',str[2]='o',str[3]='k'。C++中用'\0'来标识一个字符串的结束,这里,str[4]~str[9]都是'\0'。通常用strlen()函数来计算一个字符串的长度,故strlen(str)的值是4。与strlen()函数比较容易混淆的是sizeof()函数,这里sizeof(str)的值是10。

strlen与sizeof的区别如下所示:

(1)strlen()是函数,在运行时才能计算。参数必须是字符型指针(char*),且必须是以'\0'结尾的。当数组名作为参数传入时,实际上数组已经退化为指针了。它的功能是返回字符串的长度。

(2)sizeof()是运算符,而不是一个函数,在编译时就计算好了,用于计算数据空间的字节数。因此,sizeof不能用来返回动态分配的内存空间的大小。sizeof常用于返回类型和静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。

当参数分别如下时,sizeof返回的值表示的含义如下所述。

1)数组——编译时分配的数组空间大小,如:

char a[10]="hello";

因为char占1Byte,所以sizeof(a)的值是10*1=10Byte。

2)指针——存储该指针所用的空间大小,如:

char *str="I am from China."

因为str存储的是一个字符指针,所以sizeof(str)是指针所占的空间,即是4Byte。

3)类型——该类型所占的空间大小,如:

int b=10;

因为在32位的机器上,int类型占4Byte,所以sizeof(b)的值是4Byte。

4)对象——对象的实际占用空间大小,如:

class Class_Sample{

    int a,b;

    int func();

}Class_a;

两个int类型的值是8Byte,所以sizeof(Class_a)的值是8Byte。

5)函数——函数的返回类型所占的空间大小,且函数的返回类型不能是void。

转载地址:http://xyzso.baihongyu.com/

你可能感兴趣的文章
assert 断言
查看>>
CS 229 notes Supervised Learning
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>
DataTable转换成json字符串
查看>>
RecyclerView重用导致的元素重复问题
查看>>
iOS网络协议----HTTP/TCP/IP浅析
查看>>
ubuntu 12.04 安装 redis
查看>>
IOS_CGRect
查看>>
Sql Server中不常用的表运算符之APPLY(1)
查看>>
【DM642】ICELL Interface—Cells as Algorithm Containers
查看>>
linux所有命令失效的解决办法
查看>>
力扣算法题—085最大矩阵
查看>>
svs 在创建的时候 上传文件夹 bin obj 这些不要提交
查看>>
mysql-用命令导出、导入表结构或数据
查看>>
Tinkphp
查看>>
EntityFrameworkCore 一对一 && 一对多 && 多对多配置
查看>>
How to temporally disable IDE tools (load manually)
查看>>
Vue.js学习 Item4 -- 数据双向绑定
查看>>
几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
查看>>
server application unavailable
查看>>