C语言中的数组

数组的概念

数组是一组相同类型元素的集合

数组的创建

数组类型 数组名[数组个数]

例如 int num[2] 代表创建一个长度为2的 int 类型数组

注意,这个数组的长度,必须是常量,不可以是变量

数组的初始化

数组的初始化指的就是给数组放入一些初始值

int num[2] = {1,2};

求数组的大小

可以用 sizeof 函数求数组的大小

假设有一个整形数组

int num[] = {1,2};

求这个数组的长度,你可能会这么写

printf("%d\n", sizeof(num));

输出结果会是

结果不对,你可能会好奇为什么不对,这跟 sizeof 函数本身有关, sizeof 函数求出的是传入参数的占用空间大小,换言之,求的是这个 长度的 int 类型数组的占用空间大小,如果我们要真的拿到这个数组的长度,那就需要除以这个数组类型的单个长度大小,其实严格来说,sizeof不属于函数,属于操作符应该,不然你试试,你在函数库找不到这个 sizeof 函数的

printf("%d\n", sizeof(num)/sizeof(int));

这里顺便一提,如果相求字符串本身的长度的话,与整形数组的不一致,字符串的可以直接用 strlen 函数求,因为字符串涉及到最后有一个 \0,所以就算用 sizeof(字符串数组)/sizeof(char) ,结果也是不对的,而 strlen 只会取 \0 之前的内容

打印数组

比如定义两个数组另一个 int 类型,一个字符串

int num[] = {1,2};
char username[] = "root";

打印他们的长度,先打印这个字符串吧

printf("%s\n", username);

然后来打印这个num

printf("%d\n", num);

你是不是会这么写,这么写就错了,整形的打印,不能这么写,需要写一个循环去遍历

int i = 0;
for (i = 0; i < sizeof(num)/sizeof(int); ++i) {
        printf("%d\n", num[i]);
    }

数组在内存中的存放是连续的

我们创建一个数组,打印它的地址值看看

#include <stdio.h>
#include <string.h>

#include "method.h"

int main() {

   int num[] = {1,2,3,4,5};
   int i = 0;
    for (i; i < sizeof(num) / sizeof(int); ++i) {
        printf("%p\n", &num[i]);
    }

}

是不是地址值查了4?4是什么,4不就是一个int占得大小么?如果不信,我们再打印个字符数组

#include <stdio.h>
#include <string.h>

#include "method.h"

int main() {

   char num[] = {'a','b','c'};
   int i = 0;
    for (i; i < sizeof(num) / sizeof(char ); ++i) {
        printf("%p\n", &num[i]);
    }

}

16进制9下来就是A,没错吧?

数组的维度

数组是比较灵活的,可以有一维数组,当然也可以有二维数组

比如  int message[2][3]; 就是创建一个 2 行, 3 列的二维数组

二位数组的创建及初始化

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

我们看看这个数组是什么样的

这就是二维数组的创建和初始化,二维数组,无非就是数组元素是数组而已

二维数组的使用

二维数组的使用也是通过下标的形式进行使用的,比如我更改一个元素的值

    int message[2][3] = {{1,2,3},{4,5,6}};
    message[1][1] = 9;
    printf("%d\n", message[1][1]);

遍历二维数组

#include <stdio.h>
#include <string.h>

#include "method.h"

int main() {

    int message[2][3] = {{1,2,3},{4,5,6}};
    int i = 0;
    for (i = 0; i < 2; ++i) {

        int j = 0;
        for(j; j < 3; ++j) {
            printf("%d\n", message[i][j]);
        }

    }

}

当然,也可以直接通过下表找到某个值,比如上面我更改的一个值

二位数组的地址

还有一个有趣的事情(当然可能只是我个人觉得有趣),二维数组元素的地址

仔细看,是不是每一个都是递增的,相差类型的占位?

二维数组在内存中的存放

在我们的理解中,二维数组是这样的(画图丑请忽略,不是专业画图的,假嘎玛噶的有那么个意思就行....)

但是你想想地址值,这玩意应该是连续的,也就是说,应该是这样的~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值