新手学习嵌入式day4(数组)

一丶数组

1.概念:
            具有一定顺序的若干变量的集合

2.定义格式:
                  存储类型 数据类型 数组名[元素个数];
                  int arr[5];
                  数组名:代表数组的首地址,地址常量,不能为左值,不能被赋值 
                  访问元素:数组名[下标],下标的范围:0 ~ n-1 n:元素个数
                  arr[0]:访问第一个元素
                  arr[3]:访问第四个元素
                  注意不要越界,数组越界可能不会报错,需要自己注意

3.特点: 
             数据类型相同,元素的数据类型要和数组的数据类型一致

             内存连续

4.注意:
           (1).标的范围:0 ~ n-1
           (2).数组名命名需要符合标识符的命名规
           (
3)  .在同一个函数中,数组名不能与其他变量名相同

5.分类:
           一维数组,二维数组,多维数组

二丶一维数组

1.定义格式
                  存储类型 数据类型 数组名[元素个数];
                  int arr[5];
                  数组名:代表数组的首地址,地址常量,不能为左值,不能被赋值 
                  访问元素:数组名[下标],下标的范围:0 ~ n-1 n:元素个数
                  arr[0]:访问第一个元素
                  arr[3]:访问第四个元素
                  注意不要越界,数组越界可能不会报错,需要自己注意

2. 初始化
  (1).全部初始化:
                         int a[5] = {1, 2, 3, 4, 5}; // 1 2 3 4 5

 (2).未初始化:
                          int a[3]; //随机值
                          a[0]=1;
                          
a[1]=2;
                          a[2]=3;

(3).部分初始化:
                          int a[5] = {1, 2, 3}; // 1 2 3 0 0,未被初始化的值为0

3.引用
        (1)
必须先定义数组后引用
        (2).   每次只能引用一个数组元素,若想要引用所有的元素需要循环遍历
        (3). 引用数组元素防止越界,越界是危险的,虽然编译器有时不会报错
        (4).  打印数组元素地址用格式:"%p"

4.遍历数组
          将循环变量作为下标,循环遍历数组

#include<stdio.h>
int main(int argc,char *argv())
{
	int arr[5]={1,2,3,4,5};
	for(int a=0;a<5;a++)
	printf("%d\n",arr[a]);
	return 0;
}

5.数组大小

          (1).sizeof(数组名);
          (2).数据类型的大小 * 元素个数;

三丶清零函数

1.bzero

           #include <strings.h>
           void bzero(void *s, size_t n);
           功能:将数组的内存空间设置为0
           参数:s:要清空的数组的首地址
           n:数组的大小(字节)
           返回值:无
2.memset

             #include <string.h>
             void *memset(void *s, int c, size_t n);
             功能:将数组的内存空间设置为某一个值
             参数:s:要清空的数组的首地址
             c:你要设置的值
             n:数组的大小(字节)
            返回值:清空的数组的首地址

四丶字符数组

1.形式
          (1)  char a[] = {'a', 'b', 'c'}; // 逐个字符赋值
          (2)  char b[] = "hello"; // 字符串常量赋值 sizeof(b) = 6
          (3)  char c[] = {"hello"}; // 字符串常量赋值 sizeof(c) = 6

          注意:字符串赋初值时经常省略数组的长度,以后面实际赋值为准,要注意数组越界问题

2.输入输出
     输入:(1)  char buf[32] = {};
                  scanf("%s", buf); // 从终端输入字符串到数组buf。但是遇到空格或者\n会结束
                   如果想要包含空格就 sacnf("%[^\n]", buf); // 直到遇到\n结束
                  
(2)  gets

                          char *gets(char *s);
                         功能:从终端获取字符串
                         参数:目标字符串的首地址
                         返回值:目标字符串的首地址

                         注意:谨慎使用、使用时会保警告,不检查数组越界

     输出:(1)  printf("%s\n", buf); // 遇到 \0 就会结束

           (2)  puts
                    int puts(const char *s)
                    功能:向终端输出字符串
                    参数:s:要输出字符串的首地址
                    返回值:输出字符的个数

3.计算字符串的实际长度
             (1)for循环遍历,找到 \0 的位置
            ( 2)strlen函数,求字符串的实际长度,不包含\0

4.sizeof和strlen的区别​​​​​​
             (1).  sizeof是关键字;strlen是函数
             (2).  sizeof计算数据所占空间字节大小;stelen计算字符串的实际个数
             (3).  在元素个数省略的情况下,sizeof包括\0,strlen不包括 \0,
在这情况下计算字符串长度sizeof比strlen大1

五丶二维数组

1.格式:
           存储类型 数据类型 数组名[行数][列数];
           int a[2][3];

2.访问元素:
            数组名[行下标][列下标] (下标范围,0 ~ 行数-1 0 ~ 列数-1)
            a[0][0]:第一行第一列的元素
            a[1][2]:第二行第三列的元素
            注意:行数可以省略,但是列数不能省略,如 int a[][3];
           二维数组元素个数 = 行数 * 列数

3.数组名
          a:表示第一行的首地址
         a+1:表示第二行的首地址

4.初始化

(1)  全部初始化:
               int a[2][3] = {1, 2, 3, 4, 5, 6}; // 1 2 3 4 5 6 顺序赋值
               int a[2][3] = {{1, 2, 3},{4, 5, 6}}; // 1 2 3 4 5 6 按行赋值
(2)  部分初始化:

              int a[2][3] = {1, 2, 3, 4}; // 1 2 3 4 0 0
              int a[2][3] = {{1, 2}, {4, 5}}; // 1 2 0 4 5 0
(3)  未初始化:
              int a[2][3]; // 随机数,需要单独赋值

5.内存分配
          a:第一行的首地址
         a[0]:第一行第一列的地址
         a+1:第二行的首地址
         a[1]:第二行第一列的地址

6.计算大小
         sizeof(数组名); == 数据类型大小 * 行数 * 列数;

7.遍历二维数组

         for循环嵌套,外层循环变量表示行下标,内层循环变量表示列下标

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int arr[2][3] = {1, 2, 3, 4, 5, 6};
    for (int m = 0; m < 2; m++)
    {
        for (int n = 0; n < 3; n++)
        {
            printf("%d ", arr[m][n]);
        }
        printf("\n");
    }
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值