总结——数组。

本文详细介绍了数组的基本概念,包括一维和二维数组的创建、初始化、字符数组的使用、注意事项及数组计算等内容。

 今天总结数组的相关知识,重点介绍一维数组和二维数组两部分内容。

一、数组的创建。

数组由——类型   数组名   [常量或常量表达式]——构成。

例如:

int arr[10] = {0};

需要特别注意的下标引用操作符中间不能出现变量,

例如:

int m = 10;
int arr[m] = {0};

这种创建数组的方式是错误的!

但是你可以通过 #define 来定义标识符常量。

还要特别注意的是,数组类型不单单指前面的 int 、char 等类型,

也包括后面下标引用操作符中的内容。

二、数组的初始化。

数组初始化有两种情况:

1、不完全初始化,例如:

int arr[10] = {1,2,3};

2、完全初始化,如:

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

三、字符数组。

1、字符数组在创建时有如下方式:

char [3] = { 'a', 98, 'c'};
char [3] = { 'a', 'b', 'c'};
char [] = "abcdef";

现对第三种方式进行讨论:
当用 sizeof() 对数组 arr[] 求大小时,输出的值是7,

具体原因是这种方式会在元素 f 末尾加上一个隐藏的 “\0”,“\0”大小会占一个单位。

如用 strlen() 对数组 arr[] 求长度时,输出的值是6,

这里是因为 strlen() 这个函数在统计时不会统计“\0”。

2、当用指针指向数组时,

char *p = "abcdef";

 sizeof(p)——输出值为4,这里的p为指针,而指针大小为4;

strlen(p)——输出值为6,理由同数组arr中一致。

这里需要注意的是:

char arr1[] = "abcdef";
char arr2[] = "abcdef";
char *p1[] = "abcdef";
char *p2[] = "abcdef";

在使用相等判断条件时,

if (arr1 == arr2);//错误
if (p1 == p2);//正确,p中存放的都是"abcdef"的地址

四、数组注意事项。

1、有两种创建二维数组的情况,如下:

int arr[3][5] = { {1,2}, {4,5}};
int arr[][5] = { {1,2}, {4,5}};//行的信息是可以省略的,而列不行

2、在一维数组中,数组名代表首元素的地址;而在二维数组中,数组名不能代表 arr[0][0] 的地址。

int *p = arr1;//一维数组
int *p = &arr2[0][0];//二维数组

3、arr[i] = *(arr+i) = *(i+arr) = i[arr]

五、数组计算。

1、一维整型数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    int a[] = { 1, 2, 3, 4 };
    printf("%d\n", sizeof(a));//16
    printf("%d\n", sizeof(a + 0));//4
    printf("%d\n", sizeof(*a));//4(首元素)
    printf("%d\n", sizeof(a + 1));//4
    printf("%d\n", sizeof(a[1]));//4
    printf("%d\n", sizeof(&a));//4(取出地址)
    printf("%d\n", sizeof(&a + 1));//4(跳过整个数组)
    printf("%d\n", sizeof(&a[0]));//4
    printf("%d\n", sizeof(&a[0] + 1));//4
    system("pause");
    return 0;
}

2、一维字符数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
    printf("%d\n", sizeof(arr));//6
    printf("%d\n", sizeof(arr + 0));//4
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4
    printf("%d\n", sizeof(&arr + 1));//4
    printf("%d\n", sizeof(&arr[0]));//4
    printf("%d\n", sizeof(*&arr));//6
    system("pause");
    return 0;
}

3、一维字符数组的 strlen 相关计算。

    printf("%d\n", strlen(arr));//随机值
    printf("%d\n", strlen(arr + 0));//随机值
    printf("%d\n", strlen(*arr));//错误代码
    printf("%d\n", strlen(arr[1]));//错误代码
    printf("%d\n", strlen(&arr));//随机值
    printf("%d\n", strlen(&arr + 1));//随机值
    printf("%d\n", strlen(&arr[0]));//随机值
    printf("%d\n", strlen(*&arr));//随机值

4、指针访问数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char *p = "abcdef";
    printf("%d\n", sizeof(p));//4
    printf("%d\n", sizeof(p + 1));//4
    printf("%d\n", sizeof(*p));//1
    printf("%d\n", sizeof(p[0]));//1
    printf("%d\n", sizeof(&p));//4
    printf("%d\n", sizeof(&p + 1));//4(p地址的后面)
    printf("%d\n", sizeof(&p[0] + 1));//4
    system("pause");
    return 0;
}

5、指针访问数组的 strlen 相关计算。

    printf("%d\n", strlen(p));//6
    printf("%d\n", strlen(p + 1));//5
    printf("%d\n", strlen(*p));//错误代码
    printf("%d\n", strlen(p[0]));//错误代码
    printf("%d\n", strlen(&p));//随机值
    printf("%d\n", strlen(&p + 1));//随机值
    printf("%d\n", strlen(&p[0] + 1));//5

6、另一种方式的一维字符数组 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char arr[] = "abcdef";
    printf("%d\n", sizeof(arr));//7
    printf("%d\n", sizeof(arr + 0));//4
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4
    printf("%d\n", sizeof(&arr + 1));//4
    printf("%d\n", sizeof(&arr[0] + 1));//4
    printf("%d\n", sizeof(*&arr));//7
    system("pause");
    return 0;
}

7、另一种方式的一维字符数组 strlen 相关计算。

    printf("%d\n", strlen(arr));//6
    printf("%d\n", strlen(arr + 0));//6
    printf("%d\n", strlen(*arr));//错误代码
    printf("%d\n", strlen(arr[1]));//错误代码
    printf("%d\n", strlen(&arr));//6
    printf("%d\n", strlen(&arr + 1));//随机值
    printf("%d\n", strlen(&arr[0] + 1));//5

数组名单独放在 sizeof 内部,数组名表示整个数组。

数组名:数组名表示整个数组,&数组名表示数组的地址。

除此之外,所有遇到的数组名都是数组首元素的地址。

8、二维整型数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    int a[3][4] = { 0 };
    printf("%d\n", sizeof(a));//48
    printf("%d\n", sizeof(a[0][0]));//4
    printf("%d\n", sizeof(a[0]));//16
    printf("%d\n", sizeof(a[0] + 1));//4(第一行第二个元素地址)
    printf("%d\n", sizeof(a + 1));//4(第二行地址)
    printf("%d\n", sizeof(&a[0] + 1));//4
    printf("%d\n", sizeof(*a));//16
    printf("%d\n", sizeof(a[3]));//16
    system("pause");
    return 0;
}

 

转载于:https://www.cnblogs.com/xiefei777/p/7672792.html

在车辆工程中,悬架系统的性能评估和优化一直是研究的热点。悬架不仅关乎车辆的乘坐舒适性,还直接影响到车辆的操控性和稳定性。为了深入理解悬架的动态行为,研究人员经常使用“二自由度悬架模型”来简化分析,并运用“传递函数”这一数学工具来描述悬架系统的动态特性。 二自由度悬架模型将复杂的车辆系统简化为两个独立的部分:车轮和车身。这种简化模型能够较准确地模拟出车辆在垂直方向上的运动行为,同时忽略了侧向和纵向的动态影响,这使得工程师能够更加专注于分析与优化与垂直动态相关的性能指标。 传递函数作为控制系统理论中的一种工具,能够描述系统输入和输出之间的关系。在悬架系统中,传递函数特别重要,因为它能够反映出路面不平度如何被悬架系统转化为车内乘员感受到的振动。通过传递函数,我们可以得到一个频率域上的表达式,从中分析出悬架系统的关键动态特性,如系统的振幅衰减特性和共振频率等。 在实际应用中,工程师通过使用MATLAB这类数学软件,建立双质量悬架的数学模型。模型中的参数包括车轮质量、车身质量、弹簧刚度以及阻尼系数等。通过编程求解,工程师可以得到悬架系统的传递函数,并据此绘制出传递函数曲线。这为评估悬架性能提供了一个直观的工具,使工程师能够了解悬架在不同频率激励下的响应情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值