c_数组和指针

这篇博客详细介绍了C语言中的数组和指针。数组包括一维数组、多维数组的初始化、赋值和边界注意事项。强调了数组边界的控制以避免程序错误。接着,讨论了多维数组,特别是二维数组的声明、初始化和操作。同时,文章讲解了指针与数组的关系,包括指针如何表示数组地址,以及指针运算中的优先级。此外,还涉及了保护数组数据的const关键字的用法,以及如何在函数中安全地处理数组。最后,简要提到了变长数组的概念和复合字面量的使用。
摘要由CSDN通过智能技术生成

一、数组

           1) 数组由数据类型相同的一系列元素组成

           2) 声明数组告诉编译器数组中元素的数量及类型

           例:             float num[30];                          //内含30个float类型元素的数组

                             char ch[10];                            //内含10个char类型元素的数组

                             int arr[20];                              //内含20和int类型元素的数组

           3) 在使用数组元素之前,必须先给它们赋初值

    1.数组的初始化

             1)  以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔(逗号和值之间可以使用空格)

                  举例:  打印每个月的天数

#include<stdio.h>

#define MONTHS 12

int main()

{
    int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int index;
    for(index = 0;index<MONTHS;index++)
    {    
        printf("%2d 有 %2d 天!\n",index+1,days[index]);
    }
    return 0;
}

              说明: 1) 使用const声明数组,程序只能从数组中检索值,不能把新值写入数组

                       2) 要创建只读数组,应该用const声明和初始化数组

                           例: const int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};

                       3) 当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为0

                       4) 如果初始化列表的项数多于数组元素个数,编译器就会报错

                       5) 如果初始化数组时省略方括号中的数字,编译器会根据初始化列表中的项数来确定数组的大小

                       6) 指定初始化器可以初始化指定的数组元素

                            例: int arr[6] = {[5]=22};

                            注: 在初始化一个元素后,未初始化的元素都会被设置为0

                                  如果指定初始化器后面有更多的值,那么后面这些值将被用于初始化指定元素后面的元素

                                  如果再次初始化指定的元素,那么最后的初始化将会取代之前的初始化

    2.给数组元素赋值

              1) 声明数组后,可以借助数组下标(或索引)给数组元素赋值

                       例: int arr[10];

                             for(int i = 0;i<10;i++)

                                   arr[i] = i;

              2) C不允许把数组作为一个单元赋给另一个数组,除初始化以外也不允许使用花括号列表的形式赋值

    3.数组边界

              1) 在使用数组时,要防止数组下标超出边界(确保下标是有效的值)

              2) 使用越界的数组下标会导致程序改变其他变量的值

              3) 在C标准中,使用越界下标的结果是未定义的

二、多维数组(数组的数组)

               例: int arr[2][3];                                //内含2个数组元素的数组,每个数组元素内含3个int类型的元素

       初始化二维数组

               例: int arr[2][3] = { {1,2,3},{4,5,6}};

              1) 初始化可以省略内部的花括号,只保留最外面的一对花括号(只要保证初始化的数值个数正确)

              2) 如果初始化的数值不够,则按照先后顺序进行初始化,后面没有值的默认初始化为0

              例1: int arr[2][3] = { {5,6},{7,8}};

              例2: int arr[2][3] = {5,6,7,8};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值