数组注意点

数组在内存中的存储
  • 变量的内存寻址是从大到小,所以存储数据时会从高字节开始存储
  • 数组存储的和变量相反,元素存储是从内存地址小的开始,但是元素内部存储是和变量存储一致
  • 数组名就是数组的地址
值传递和地址传递
  • 基本数据类型作为函数的参数是值传递
// 如果形参是基本数据类型,在函数中修改形参的值不会影响到实参的值
void change(int value)
{
}
  • 数组名作为函数的参数传递,是传递的数组的地址
  • 因为数组名就是数组的地址 &number == &number[0] == number
  • 如果数组作为函数的形参,元素的个数可以省略
// 如果形参是数组,那么在函数中修改形参的值,会影响到实参的值
void change(int values[])
{
}
函数中计算长度
  • 如果数组作为形参,那么在函数中就不能通过数组的名称计算出数组元素的个数
  • 因为系统会自动将数组形参转换为指针,指针占用8个字节
    • 传递的是数组名称,其实传递的是地址
    • 如果传递的是地址,其实传递的是指针
    • 指针在64位编译环境占8个字节
  • 只能在外面将长度传递过来
取出数组中得最大值
  • 定义一个变量,假设为最大值
    • 注意:不能假设一个不是数组中的值为最大值
  • 遍历数组
  • 依次取出数组中每一个元素的值,和假设的最大值进行比较,如果数组的元素大于假设的最大值,就交换最大值
int arrayMax(int nums[], int length)
{
    int max = nums[0];
    for(int i = 1; i < length; i++)
    {
        if(max < nums[i])
        {
            max = nums[i];
        }
    }
    return max;
}
  • 因为数组是指针传递,所以也可以通过索引来取出最大值
  • 这种方式可以多思考,还有很多情景可以使用索引来进行
int arrayMax(int nums[], int length)
{
    int max = 0;
    for(int i = 1; i < length; i++)
    {
        if(nums[max] < nums[i])
        {
            max = i;
        }
    }
    return nums[max];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容