数组的一些简单知识

今天看了一些有关数组的简单知识,自己便概括总结如下:

一维数组的创建,初始化,使用以及在内存中的存储

创建 ,初始化

1.数组创建时,[ ]中必须是常量,不可以使用变量。
int count = 10;
int arr[count];

//此处虽然count的值为10,但是它仍然是一个变量,不能放在[]中。
2.数组在创建时,如果想要不指定数组的大小,那就必须得初始化数组。数组的元素个数根据初始化的内容来确定。
例如:
int arr1[10] = {0};
int arr2[] = {1, 2, 3, 4, 5};

//此处数组arr2的大小就为5。

使用

1.数组是使用下标来访问的,下标从0开始。
2.数组的大小可以通过计算得到。
#include <stdio.h>
int main()
{
    int arr[10] = {0};

    //对数组内容赋值。
    int i = 0;  //作下标
    for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    {
        arr[i] = i;
    }

    //输出数组的内容。
    for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    {
        printf("%d ", arr[i]);
    }

    return 0;
}

    //在对数组进行赋值和输出数组过程中,for循环的判断条件处不直接用10而采用计算的好处是:
    //当数组的大小发生变化是,此处代码不用再做修改。

内存中的存储

为了了解数组在内存中存储,我们可以先打印观察数组每个元素的地址:
#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;
}
输出结果如下:

这里写图片描述

仔细观察便可以知道,数组在内存中是连续存放的,并且是从底地址处向高地址处依次存放。

一维数组的指针访问

1.数组的数组名就是数组首元素的地址:
#include <stdio.h>
int main()
{
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

    printf("%p\n", arr);
    printf("%p\n", &arr[0]);
    printf("%d\n", *arr);

    return 0;
}
输出结果如下:

这里写图片描述

2.通过对数组名+整数的运算,我们可以获得每个元素的地址:
#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, &arr[%d]=%p\n", i, &arr[i], i, arr+i);
    }

    return 0;
}
输出结果如下:

这里写图片描述

因此,我们便可以通过指针来访问数组:
#include <stdio.h>
int main()
{
    int arr[10] = {0};
    int i = 0;
    int *p = arr;

    for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    {
        *(p+i) = i;
    }
    for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
    {
        printf("%d ", *(p+i));
    }

    return 0;
}
输出结果为:

这里写图片描述

二维数组

创建,初始化

二维数组在初始化过程中,可以不给出行的大小,但必须给定列的大小。

使用

二维数组的使用也是通过下标:
#include <stdio.h>
int main()
{
    int arr[3][4] = {0};
    int i = 0;

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

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

    return 0;
}

内存中的存储

二维数组在内存中也是连续存储的。

数组作为函数参数

数组作为函数参数时,实际上只是把数组的首元素的地址传递过去,并不会把整个数组传递过去。因此在函数内部,无法用sizeof
求得数组大小。

数组名代表整个数组的两种情况

1.sizeof(数组名),即数组名单独放在sizeof内部。
2.&数组名,此处数组名代表整个数组,取出的是整个数组的地址。

或许还有很大的不足,希望大家可以指出,互相探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值