数组的一些简单知识

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

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

创建 ,初始化

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.&数组名,此处数组名代表整个数组,取出的是整个数组的地址。

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

内容概要:本文详细介绍了如何使用Matlab对地表水源热泵系统进行建模,并采用粒子群法来优化每小的制冷量和制热量。首先,文章解释了地表水源热泵的工作原理及其重要性,随后展示了如何设定基本参数并构建热泵机组的基础模型。接着,文章深入探讨了粒子群法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制热模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源热泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源热泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制热量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
内容概要:本文详细介绍了如何利用Blender和Python为污水处理厂创建高精度3D渲染效果图及其背后的参数化建模方法。首先,作者展示了如何通过Python代码管理复杂的设备数据结构(如嵌套字典),并将其应用于3D模型中,确保每个工艺段的设备参数能够准确反映在渲染图中。接着,文章深入探讨了具体的材质处理技巧,比如使用噪声贴图和溅水遮罩来增强金属表面的真实感,以及如何优化渲染性能,如采用256采样+自适应采样+OpenImageDenoise的降噪组合拳,将渲染间缩短至原来的三分之一。此外,文中还涉及到了一些高级特性,如通过Houdini的粒子系统模拟鸟类飞行路径,或者利用Three.js实现交互式的在线展示。最后,作者强调了参数化建模的重要性,它不仅提高了工作效率,还能更好地满足客户需求,尤其是在面对紧急的设计变更。 适合人群:从事污水处理工程设计的专业人士,尤其是那些希望提升自己3D建模技能和提高工作效率的人。 使用场景及目标:适用于需要快速生成高质量污水处理厂设计方案的场合,特别是在投标阶段或向客户展示初步概念。通过这种方式,设计师可以在短间内制作出逼真的效果图,帮助客户直观理解设计方案,并且可以根据客户的反馈迅速调整模型参数,从而加快决策过程。 其他说明:除了技术细节外,本文还分享了许多实用的经验和技巧,如如何平衡美观与效率之间的关系,以及怎样应对实际项目中的各种挑战。对于想要深入了解这一领域的读者来说,这是一份非常有价值的学习资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值