C语言基础——数组

 数组 与 字符数组  
    构造数据类型:  有程序员设计的数据类型  基于基本数据类型的组合 
    数组: 将多个 相同类型的 数据 连续,有序存放 构成的数据类型  称数组 
    数组的元素:  即 数组中的每一个数据
    
数组定义:  
    存储类型  元素数据类型  数组名[元素个数];

示例: 存储5个整型 元素的数组  
    int arr[5];

数组的初始化: 定义数组时给定 初始值 
    int arr[5] = {初始化表};
    int arr[5] = {1,2,3,4,5};

    int arr[5] = {1,0,2}; //初始化表 没有包含全部元素, 剩余元素默认赋值为0
    int arr[]  = {1,2,3,4}; //定义数组时, 没有给定元素个数,但有初始化表
                    //则 数组的个数将由 初始化表中元素个数决定
    int arr[];  // 不能这样定义 , 编译器无法确定你元素的个数 
    
    int arr[5] = {0}; //将数组元素全部初始化为0
    int arr[5];    
    数组定义时  元素个数 必须预先已知和确定 
    即 定义数组时  其元素个数不能是变量 
    即 程序运行起来前, 数组元素个数应该已经确定

数组的使用: 
    元素访问:  读 写 数组中的元素  
    使用 []  元素访问运算符  
示例:
    数组名[元素下标]; 
    
元素下标: 数组中的元素 从0开始 自左向右依次编号  
    //元素下标 可以是整型表达式 
    
数组的遍历: 即 将数组中的 每个元素都访问一次 
for(int i=0;i < sizeof(arr)/sizeof(arr[0]) ; i++) 

for(int i = sizeof(arr)/sizeof(arr[0]) -1; i >= 0; i--)

除初始化外, 数组不能 通过元素列表方式赋值 
arr = {1,2,3,4,5}; // 不行 C语言 不支持 

数组名: 
    1. 代指这个数组本身    数组名[下标];  sizeof(arr);
    2. 代指这片内存空间的 首地址  printf("%p",arr);  //arr == &arr[0]

数组的内存模型:
    数组占用空间 为 元素个数 * 每个元素的长度  
    
&arr[0]; 该表达式 表示 取 数组arr中 0号元素的 地址 

示例: 
    斐波那契数列  数组方式求解
    n = 25 
    int arr[26] = {0,1,1};  arr[25]; //  数组下标 就是 第n项的值
    arr[1]; 

练习: 
    有数组int arr[10] = {6,3,5,2,4,20,7,1,23,11};
   1. 找到 数组中 最大元素的 值  和其 下标

 

作业: 
    数组 {11,23,1,7,20,4,2,5,3,6}
    数组排序  ==> 升序 


    
字符串:  本质也是一个数组  char 类型的数组 
    char buf[20];
    fgtes(buf, sizeof(buf), stdin);
    
    "hello"  常量   常量区 
    //定义一个字符数组 初始化为 hello
    char buf[20] = "hello";
    
    buf = "world"; // 不能  数组不能一次赋值多个元素
    
常量字符 "hello"      
    代指 1. 这个字符串本身  char buf[20] = "hello";
         2. 代指 常量字符串 在常量区的地址 

字符串的长度??
    从字符串开始 到结束'\0' 值 0 中间有多少个字符 

练习: 
    1.输入一个字符串, 统计其中  大写字符的个数  
    2.字符串拷贝  输入一个字符串到 buf中 拷贝buf中的字符 
        到 char arr[20];数组中  去除'\n'  
    字符串拷贝函数  #include <string.h>     
char *strcpy(char *dest, const char *src);
    将字符串 src 拷贝一份到 dest 空间中 
char *strncpy(char *dest, const char *src, size_t n);
    将字符串 src 拷贝一份到 dest 空间中  n 表示需要拷贝的字符个数 

    3.写一个程序 判断输入的 密码 是否正确  假设正确密码为 "123456"
 #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);
    比较两个字符串  s1 和 s2    相等 返回 0      != 0 不相等


    


作业:
    1. 输入一个字符串buf  删除其中的所有数字字符 在buf中


    
二维数组:  即 数组中的元素 是一个数组(一维数组) 
    
成绩表      语文0  数学1  外语2
0    张三  88     79       99      一维数组 {88,79,99}    int arr[3];
1    李四  78     100      60      一维数组 {78,100,60}   int arr[3];
        {88,78} {79,100} {99,60}
    int arr3[3][2] = {{88,78} {79,100} {99,60}};
    张三的语文成绩  arr3[0][0]    
    张三的数学成绩  arr3[1][0]    

成绩表: 将多个 相同类型的 数据 连续,有序存放 构成的数据类型  称数组 
    二维数组:  定义 
    int arr2[2][3];
    初始化: 
    int arr2[2][3] = {{88,79,99},{78,100,60}};
    
int arr[3] = {88,79,99};  arr[0]    
    访问: 
    张三的语文成绩  arr2[0][0]
        arr2[0] 是一个一维数组 属于二维数组的0号元素 
    张三的数学成绩  arr2[0][1]
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值