【C语言】一维数组和二维数组怎么定义?怎么使用?sizeof在数组中的使用?数组和指针的结合?

本文详细介绍了C语言中一维和二维数组的定义、初始化、修改、内存开辟(静态与动态)、访问及遍历方法。通过实例展示了如何使用sizeof操作符计算数组大小,并讲解了数组与指针的关系。对于动态开辟的二维数组,强调了其内存布局的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、如何定义一维和二维数组?

二、如何修改已赋值数组?

三、数组的地址怎么开辟?

1.静态开辟

2.动态开辟malloc

四、二维怎么访问数组?

五、sizeof在数组中的用法

六、怎么遍历数组?

七、数组与指针的结合


一、如何定义一维和二维数组?

1.只定义,不赋值:

//只定义不初始化,内存内存放随机值​​​​​​
int arr[10];//一维
int arr[2][3]; //二维

一维也可以这样定义:

int arr[]={1,2};//这个的大小就是根据赋的初值系统自己计算

 注意:

  • int arr[]; 这样不对
  • int arr[a];  []里面的数字必须为常量,如果a是变量未赋值的话就是错误的写法

 

二维也可以这样定义:

 int arr[][3] = { {1,2,3},{4,5,6} };//这个的行大小就是根据赋的初值系统自己计算

 

 注意:

  • int arr[][] = { {1,2,3},{4,5,6} }; //错误的写法
  • int arr[2][] = { {1,2,3},{4,5,6} }; //错误的写法

2.不完全赋值:

一维:

int arr[2]{1,2}; 

int arr[2]={1}; //未赋值的位置值为0

 

二维:

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

int arr[2][3] = { {1,2},{3} };  //未赋值的位置值为0

 

int arr[2][3] = { 1,2,3,4,5 }; //行优先,未填充的位置值为0

二、如何修改已赋值数组?

直接修改即可,例:

将第二行第二列的值修改为9:arr[1][1]=9;

一维:

 二维:

 

三、数组的地址怎么开辟?

1.静态开辟

  • 一维数组:直接定义声明赋值即可。
  • 二维数组:直接定义声明赋值即可。地址是连续的,实际内存还是一维数组,是一维数组嵌套一维数组。

2.动态开辟malloc

  • 一维数组:
    • int * brr=(int*)mallloc(sizeof(int)*n);//开辟一段内存存储长度为n的数组brr

      二维数组:

      • // 动态开辟的前一行与后一行的地址不挨着,是随机开辟的
        
        int** brr = (int**)malloc(sizeof(int*) * row);//ROW为行数
        for (int i = 0; i < ROW; i++)
        {
            brr[i] = (int*)malloc(sizeof(int) * column);//column为列数
            memset(brr[i], 0, column * sizeof(int));//memset初始化内存
        }

        或者参照这篇文章: C语言实现动态二维数组的开辟

      •  

四、二维怎么访问数组?

(1)访问行:数组名[ ];

arr[0]-> 第一行

arr[1]-> 第二行

arr 数组名的两层含义:

        1.指向首元素地址= &arr[0][0]≠&arr (&arr是arr数组本身的地址)

        2.表示自身所占内存 =sizeof(arr)

(2)访问某个元素:数组名[ ][ ];

arr[1][2]; //2行3列

五、sizeof在数组中的用法

 一维数组:

以arr[2]为例:

                sizeof(arr) ->数组总字节数

                sizeof(arr[0]) ->第一个元素字节数,或者说是单个元素的大小

        而通常会看到用sizeof(arr)/sizeof(arr[0]) 表达式来计算该数组元素的个数,它的工作原理是将数组的总大小(以字节为单位)除以单个元素的大小(也以字节为单位)。这给出了数组中元素的总数。
        例如,如果“arr”是一个有10个元素的整数数组,那么sizeof (arr)将返回该数组的总大小(以字节为单位)(这将取决于特定s系统中整数的大小),而sizeof(arr[0])将返回单个整数元素的大小。将这两个值除以就得到了数组中的元素个数,在本例中为10。

二维数组

以brr[2][2];为例

                sizeof(brr) ->数组总字节数,即行和列元素总个数*定义类型的大小

                sizeof(brr[0]) ->第一行元素的总字节数

                sizeof(brr[0][0]) ->单元格类型所占字节数与一维数组arr[0]含义一致,单个元素的大小。

 

六、怎么遍历数组?

一维数组

    int arr[4];
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        //..
    }

二维数组

    int brr[n][m];//n行m列
    for (int i = 0; i < sizeof(brr) / sizeof(brr[0]); i++)//遍历行
    {
        for (int j = 0; j < sizeof(brr[0]) / sizeof(brr[0][0]); j++)//遍历行中的每一列
        {
            //..
        }
    }

七、数组与指针的结合

 一维数组

定义数组arr: int arr[n];

                数组名arr = 数组首元素地址 =  &arr[0]                

                *数组名 = 首元素的值 => *arr = arr[0];

二维数组

定义数组brr:int brr[m][n];

                数组名brr = 数组首元素地址 = &brr[0][0]

               *数组名 = 首元素的值 => *brr = brr[0][0] //访问第1行第1个元素的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值