栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux和C语言基础---数据转换和数组的部分知识梳理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux和C语言基础---数据转换和数组的部分知识梳理

  • 数据类型的转换
    • 自动转换

​​​​​​​​​​​​​​

          • 赋值转换
            • 将浮点型赋给整型时舍弃小数部分
            • 整型赋给浮点型数值不变
            • double类型赋给float类型截取前七位有效数字
            • float赋给double数值不变
            • 字符型赋给整型,字符数据放到整型的低八位储存单元中

对于无符号类型字符来说,高24位补零 对于有字符型,若为负数,高24位全补1

  • 整型赋给字符型只将低8位保存
    • 将long类型赋给int,将低位保存
    • int类型赋给long

unsigned int数据存储在long类型低位,剩下补位0 signed int若首位0,剩下位补0,若为1,剩下位补1

  • 强制类型转换
    • 程序结构与过程控制
      • 选择结构
        • if-else结构
    • 强制转换符:()
    • 运算符和表达式
      • 运算符优先级:看day6.pdf 第6页
      • 算术运算符
        • 四则运算和求模运算
        • 自增和自减
          • x=a++:a=a+1,x=a
          • x=a--:a=a-1,x=a
          • x=++a:a=a+1,x=a+1
          • x=--a:  a=a--1,x=a-1
      • 关系运算符
      • 逻辑运算符
        • &&(逻辑与)||(逻辑或)
        • !(逻辑非)
        • 逻辑短路
          • ||:当表达式1是真时,跳过判断表达式2和表达式3,直接返回真;当表达式1是假时,才去判断表达式2的真/假当表达式2是真时,跳过判断表达式3,直接返回真;当表达式2是假时,才去判断表达式3的真/假
          • &&:当表达式1是真时,才会去判断表达式2的真/假。否则,如果表达式1是假,则之后的都不会进行运算。当表达式2是真时,才会去判断表达式3的真/假。否则,如果表达式2是假,则之后的都不会进行运算。
      • 条件运算符
        • ?:
          • 表达式?表达式1:表达式2
      • 长度运算符
        • sizeof
      • 逗号运算符
        • ,(连接多个表达式组成一个新的表达式,并将最后一个表达式的值作为整个逗号表达式的值)
      • 位运算符
        • 运算符描述按位与(x&y)如果两个操作数的相应位均为1,则该位的结果值为1
        • 按位或(x|y)如果两个操作数的相应位有一个为1,则该位的结果值为1
        • 按位取反(~x)将操作数按位取反(0到1和1到0)按位异或(x^y)如果参加运算的两个操作数的相应位同号,则结果为0,异号则为1
        • 左移(x<<2)左端(高位)移出部分舍弃,右端(低位)补0右移(x>>2)右端(低位)移出部分舍弃,左端(高位)根据符号位补0或者1,无符号或正数补0,负数补1

if(条件表达式){ 语句;} if(条件表达式){ 语句1;} else 语句2;

  • switch结构

switch(表达式){ case常量表达式1: 语句1; ​break; ​case 常量表达式2: 语句2; break; case 常量表达式3: 语句3; ​break; default: 语句4; break:}

  • switch(表达式)值应为一个整数(包括字符数据)
    • 循环结构
      • while循环

while(表达式){           循环体 }

  • do-while循环

do{          循环体: }while   (表达式);

  • for循环

for(表达式1;表达式2;表达式3){        循环体; }

  • 循环嵌套
    • 如果一个循环出现在另一个循环中,则为嵌套循环
    • 其他控制语句
      • break   用于switch中终止case,用于从循环体内跳出循环体,提前结束循环接着执行循环下面的语句

不能用于除此以外的语句,且多层循环,break只能向外跳一层

  • continue   结束本次循环,既跳出循环体中下面未执行的语句,接着执行下一次是否执行循环的判定

在for循环中,continue影响循环的增量部分,然后执行条件测试

  • return   结束当前函数,并将返回值返回给函数调用的位置
    • goto   无条件转向语句

用法 goto标签

  • 数组
    • 一维数组
      • 一维数组及相关概念
        • 定义 :存储类型   数据类型    数组名【数组长度】
        • 存储类型 :auto ,register,static,extern
        • 数据类型:可以是任意基本数据类型或构造数据类型
        • 数组名:应当符合标识符命名规则
        • 数组长度:所包含的数据个数称为数组的长度
      • 数组元素的引用
        • 数组必须逐个引用,不能整体引用
        • 元素下标由0开始

数组名【下标】

  • 内存分配
    • 变长数组
    • 一维数组的初始化
      • 一般形式:类型 数组名[常量表达式]={值,值}
      • 部分元素的初始化:如果部分赋值,剩余部分赋0
      • 全元素初始化:例int  a[5]={1,2,3,4,5}=a[]={1,2,3,4,5}
    • 定义后划分一块连续的区域用于储存数组

int lenth=5; int  array[lenth];

  • 变长数组不能改变大小,变仅仅指在创建数组时,可以使用变量指定数组长度使用实例

    • 二维数组
      • 多维数组
        • 存储类型   数据类型    数组名[常量表达式1][常量表达式2]...[常量表达式n];
      • 二维数组定义:数据类型   数组名[常量表达式1][常量表达式2];
      • a[i][j]:i为行名,j为列名
      • 二维数组的引用及初始化
        • 数组名[行下标][行下标]
        • 分行初始化:每行元素使用花括号隔开,中间用逗号分割,未赋值的元素赋零
        • 线性初始化:所有元素写在同一个花括号下,按存储顺序赋值
        • 全部元素初始化
      • 二维数组实例
  • 数组
    • 一维数组
      • 一维数组及相关概念
        • 定义 :存储类型   数据类型    数组名【数组长度】
        • 存储类型 :auto ,register,static,extern
        • 数据类型:可以是任意基本数据类型或构造数据类型
        • 数组名:应当符合标识符命名规则
        • 数组长度:所包含的数据个数称为数组的长度
      • 数组元素的引用
        • 数组必须逐个引用,不能整体引用
        • 元素下标由0开始

数组名【下标】

  • 内存分配
    • 变长数组
    • 一维数组的初始化
      • 一般形式:类型 数组名[常量表达式]={值,值}
      • 部分元素的初始化:如果部分赋值,剩余部分赋0
      • 全元素初始化:例int  a[5]={1,2,3,4,5}=a[]={1,2,3,4,5}
    • 定义后划分一块连续的区域用于储存数组

int lenth=5; int  array[lenth];

        • 变长数组不能改变大小,变仅仅指在创建数组时,可以使用变量指定数组长度
      • 使用实例

    • 二维数组
      • 多维数组
        • 存储类型   数据类型    数组名[常量表达式1][常量表达式2]...[常量表达式n];
      • 二维数组定义:数据类型   数组名[常量表达式1][常量表达式2];
      • a[i][j]:i为行名,j为列名
      • 二维数组的引用及初始化
        • 数组名[行下标][行下标]
        • 分行初始化:每行元素使用花括号隔开,中间用逗号分割,未赋值的元素赋零
        • 线性初始化:所有元素写在同一个花括号下,按存储顺序赋值
        • 全部元素初始化
      • 二维数组实例

    • 字符串与字符数组
      • 字符串:字符串常量是由一对双引号扣起来的,以'’为结束标志的一组字符序列
      • 定义:c语言中没有专门的字符串常量;通常用一个字符数组来存储一个字符串。结束符也要存储入数组,并以此判断字符串是否结束
      • 字符串初始化就如数字数组一样
      • 字符串的输入和输出:直接使用%s即可
        • 注意下标越界
        • 注意输入时scanf()不需要&,数组名代表了数组地址
        • 用scanf输入地字符串里面可能有空格、制表符等空白字符,空白字符后面地字符不能被存入到数组中。这种情况可以通过下面方式处理

      • 字符串处理函数
        • 字符串拷贝:strcpy和strncpy       strcpy(s1,s2);

函数说明:strcoy把src所指向的字符串复制到dest     strncpy把src所指向的字符串复制到dest,最多复制n个字符 ​

        • 字符串拼接:strcat和strncat,用法同上
        • 字符串比较strcmp、strncmp、strcasecmp 、strncasecmp

[1] strcmp把s1 所指向的字符串和 s2 所指向的字符串进行比较。 [2] strncmp把s1 所指向的字符串和 s2 所指向的字符串进行比较,最多比较前 n 个字符 [3] strcasecmp把s1 所指向的字符串和 s2 所指向的字符串进行比较(忽略大小写)。 [4] strncasecmp把s1 所指向的字符串和 s2 所指向的字符串进行比较(忽略大小写),最多比较前 n 个字节

        • 字符串长度:strlen
          • 与sizeof的区别:sizeof是整个数组总长度,其中包括''而strlen不包括
    • typedef(定义别名)
      • typedef  <已有数据类>  <新数据类型>;
      • 结构体重命名:

typedef  struct  info { uint16_t  max_numb; uint16_t  numb; char  *title; }Menu ; Menu  menu1; // == struct info  menu1;定义一个struct info 的变量 Menu  *pm;  // == struct info  *pm; 定义一个指向struct info 类型的指针

      • 数组

typedef  int NUM[100]; NUM   array; //   int  array[100];

      • 指针

typedef  char *STRING; //STRING 为字符串指针类型; STRING p, s[10]; // char *p指针变量,  char *s[10] 指针数组。

      • 函数

typedef  int (* POINTER)() //POINTER 为指向函数的指针 类型。 POINTER  p1, p2;   (p1、p2为POINTER 类型的指针变量)。

      • 优缺点
        • 优点:定义别名可增加代码的可移植性.
        •       typedef  int INT16; 在cpu位数变化后可重新定义typedef  short  INT16;
        •       time()函数的返回值为time_t  (unsigned long / unsigned int)类型。
        •    表达式简洁。
        • typdef 定义时占用了存储类型的位置,编译会报错.所以typedef不能和auto、extern、static、register一同使用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030062.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号