2020-04-12

1、数组类型和多维数组本质

1.1 数组概念

        从元素类型的概念,数组是相同类型的变量的有序集合。

        从内存的角度:是连续的一大片空间。

1.2 数组初始化

数组元素的个数可以显示或隐式地指定;

分析数组初始化{0}和memset比较;

        指定长度:int a[10] = {1, 2};

        不指定长度:int b[] = {1, 2};

        全部置为0初始化:int c[20] = {0}; // 编译的时候就已经确定所有的值为0. 

        全部置为0赋值:memset(a, 0, sizeof(a));  显式地重置内存块。

数组名的技术盲点:

1、对于一维数组,c语言规定,数组首元素的地址和数组地址是两个不同的概念。

数组名(例: a)是数组首元素的地址(是常量),a+1步长为1*sizeof(int);对数组名取地址,是数组地址,&a+1步长是整个一维数组的大小10*sizeof(int)。

2、表达数组数据类型?a[10]   (c++里,new int[10])

数据类型分基础,非基础两种。数组数据类型是非基础数据类型。c语言中的数组有自己特定的类型,由元素的类型和数组大小共同决定。

例如 int array[5] 的类型为 int [5]。确定了一个连续的内存块,大小5*4=20个字节,分为5个元素,每个元素大小4个字节,按照int型解释。

如何定义数组数据类型?类型的本质是固定大小内存块的别名

typedef  int(MYARR)[5][5]  //用括号括起来。由于括号和中括号优先级相同,但结合方向都是自左向右,因此谁写在左边谁的“优先级”就高。小括号中的名字即这种数组类型的类型名,可以用抽象出的MYARR数据类型去定义其他的数组。

数据类型不分配内存空间。只有定义变量时才分配空间。

    MYARR  array;   //相当于int  array[5][5];


代码:

#include <stdio.h>

int main()

{

    typedef int (MyArrayType)[5];

    MyArrayType array;

    int i=0;

    for(i=0;i<5;i++)

    {

        array[i]=i;

    }

    for(i=0;i<5;i++)

    {

        printf("array[%d]:%d\n", i, array[i]);

    }

    printf("array:%d, array+1:%d\n", array, array+1); // 数组首元素地址

    printf("&array:%d, &array+1:%d\n", &array, &array+1); // 数组地址

    return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容