数组的相关知识总结

数组的相关知识


1.一维数组的定义:

数组是指可以在内存中连续存储多个元素的结构,与变量不同的是变量是存取一个变量的容器;并且需要注意的是数组中所有的元素是具有相同的结构类型。数组的定义与变量相同。

 2.一维数组的类别:

可以是所有的基本类型,比如:int、char、float、long、unsigned、double等。

3.一维数组的一般形式:

数组名【下标】,下标的取值范围是从0到数组元素个数(数组长度)减1

例如:数组 arr[5]的元素下标就是从0到4.

数组的创建方式:

type_t    arr_name   [const_n];

type_t    指数组的元素类型

const_n   是常量表达式,指定数组的大小

常见错误:

int  count=10;

int  arr2[count];     数组大小不能为变量,[]中只能给一个常量

★一维数组的初始化:给所有元素初始化——int a[10]={0} 即初始化整形数组a的十个元素都为0;

          或者给部分元素初始化—— inta[10]={123}这种方法是数组前三个分别初始化为1,2,3而之后的都为0。

          或者逐个元素a[10]={1,1,1,1,1,1,1,1,1,1}

      注意a[]={1,2,3,4,5}这种是可以的不给出数组元素个数

char  arr1[3]={'a',98,'c'}; 正确的初始化

char   arr2[]={'a','b','c'} ;正确的初始化

char   arr3[]=''abcdefg''; 正确的初始化

数组在创建的时候如果不想指定数组的大小就得初始化,数组元素的个数可以根据初始化的内容来确

4.一维数组的使用:

1.数组是使用下标来访问的,下标是从0开始

2.数组的大小可以通过计算得到  

例如:int arr[10];

    int  sz=sizeof(arr)/sizeof(arr[0]);

一维数组在内存中的存储:数组在内存中是连续存放的 

#include<stdio.h>

int main()

{

int arr[10]={0};

int i=0;

for(i=0;i<sizeof(arr)/sizeof(arr[0]);++i)

{

   printf("&arr[%d]=%p\n",i,&arr[i]);

}

return 0;

}

运行结果表明:随着数组下标的增长,元素的地址也在有规律的递增

指针可以理解为一个变量,专门用来存放地址的一个变量

int *ptr=NULL;定义一个整形的指针变量,初始化为NULL

char *ptr=NULL;定义字符指针

int n=10;

int *p_n=&n;

*p_n=20;

5.二维数组

★定义:若一个一维数组,它的每一个元素 也是类型相同的一维数组,便构成二维数组,所谓数组的类型相同是指数组大小、元素类型相同。

定义形式与一维数组类似:

存储类别  类型标识符  数组名标识符[常量表达式 1][常量表达式 2]

例如 :int a[3][[4];   float b[4][5];

数组a元素排列顺序如下:

 a[0][0]   a[0][1]  a[0][2]  a[0][3]

a[1][0]    a[1][1] a[1][2]  a[1][3]

a[2][0]    a[2][1] a[2][2]  a[2][3]

★初始化:给所有元素赋值 int a[2][3]={1,2,3,4,5,6} 每个元素值为  a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6.

         分行赋值  例如:int a[2][3]={{1,2},{3,4},{5,6}};

部分元素初始化 例如:int a[2][3]= {{1,2},{4},{6}};未初始化的元素为0

注意:二维数组的行可以省略,但是列必须写明

int  arr[][4]={{2,3},{4,5}};

6.二维数组的指针访问

迅雷的笔试题,代码如下

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. const int row = 2, col = 3;  
  4. int main()  
  5. {  
  6.     int a[6][9];  
  7.     cout << a[row][col] << endl;  
  8.     *(*(a+row)+col) = 10;  
  9.     cout << a[row][col] << endl;  
  10.     return 0;  
  11. }  

a是一个int **类型的指针。表达式*(a+row)返回一个int *类型的指针。*(a+row)+col还是一个int *类型指针

所以,*(*(a+row)+col)就是一个int类型的变量了。

int  a[3][4]={0};

printf("%d\n",sizeof(a));   48  12x4=48

printf("%d\n",sizeof(a[0][0]));  4

printf("%d\n",sizeof(a[0]));   4x4=16  表示第一行所有元素所占空间的大小

printf("%d\n",sizeof(a[0]+1)); 4  表示第一行第二个元素所占的空间大小为4个字节
printf("%d\n",sizeof(a+1));  4  表示第一行加一则为第二行地址  

printf("%d\n",sizeof(&a[0]+1));  4  第二行的地址

printf("%d\n",sizeof(*a));  16  第一行所有元素所占空间大小

printf("%d\n",sizeof(a[3]));  16    sizeof内部不做任何运算

总结:数组名代表整个数组的时候只有两种情况

其一:sizeof(数组名),这里的数组名代表整个数组

其二:&数组名,这里的数组名表示整个数组

数组作为函数参数的时候,不会把整个数组传递过去,实际上是把数组首元素地址传递过去了,所以即使在函数参数部分写成数组形式:int arr[]表示的依然是一个指针:int *arr


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值