C语言之数组

(一)数组篇

一,一维数组

1,定义

存储相同类型数据,且在内存空间连续的一种数据结构类型。数组三要素包括:起始地址、步长、范围(或类型、组名、大小)。

intarray[M]; //array的类型为”int [M]

2,初始化
  • 部分初始化,其余元素补0;

    int array[10]={1,2,3};

  • 清零

    int array[10]={0};

  • 越界不检

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

  • 单独赋值

    int array[10]={[3]=10};

  • 长度自检

    int array[]={1,2,3};//数组长度为3

3,访问

(1)数组名作为整体进行访问

  • 求数组大小

    int a[10];
    printf("lenth=%d\n",sizeof(a));//sizeof(a)==40

  • 取地址

    printf("&a=%p\n",&a)//&a
    printf("&a+1=%d\n",&a+1);//&a+40

    &array[0] => &array[0]+1 // 地址 +4Bytes
    array => array+1 //地址+4Bytes
    &array => &array+1 //地址+40Bytes

(2)数组名作为成员进行访问

int array[10];
array[2]==*(array+2)==2[array]//三者等价

4,返回堆中一维数据

(1)返回值返回(一级指针)

char * allocMem(int n)
{
char *p=(char *)malloc(n);
return p;
}

(2)参数返回(二级指针)

int allocMem(char **p,int n)
{
*p=(char *)malloc(100);
return *p
}

5,一维数组名的本质——一级指针

int array[10];
array == &array[0]

由于array[0]类型为“int”,所以&array[0]类型为“int ”,所以一维数组名array的类型为“int *”,即一级指针

二,二维数组

1,定义

int Array[M][N];

由定义,Array的是一个长度为5的一维数组。Array[M]的类型为“int [N]”,也就是说,从Array[0]……到Array[M-1]其内容为一个类型为int [N]的数据,也就是长度为N的一维数组。

2,初始化

行可省略列不可省略,其他同一维。

int Array[2][3]={1,2,3,4,5,6};

int Array[][3]={1,2,3,4,5,6};

int Array[][3]={1,2,3,4};

int Array[][3]={[1][2]=3};//C99标准下

3,访问

(1)数组名作为整体进行访问

  • 求大小

    int Array[3][4];
    printf("sizeof(Array)=%d\n",sizeof(Array));//sizeof(Array)=48

  • 取地址

    int Array[3][4];
    printf("%d\n",sizeof(&Array));//&Array
    printf("%p\n",sizeof(&Array+1));//&Array+48Bytes

(2)数组名作为成员进行访问

int Array[3][4];

Array == &Array[0]
Array+M == Array[M] Array[M] == &Array[M][0]
*(Array+M)+N == &Array[M][N]
*(*(Array+M)+N) == Array[M][N]

4,二维数组名的本质——数组指针

int Array[3][4];
Array == &Array[0] Array[0] == &Array[0][0]

由于Array[3]的类型为“int [4]”,也就是一维数组类型,Array[0]也是一个一维数组“int [4]”类型,则&Array的类型为“int (*)[4]”。所以,Array的类型为“int (*)[4]”。二维数组名的本质为数组指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值