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

c学习0-6

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

c学习0-6

知识点1【数据类型】


数据的不同类型 目的:合理的利用空间
char shout int long float double
计算机存储的是二进制。一位二进制只能存放 0 或 1  1b

1字节 == 8b(8位二进制)0000 0000 ~ 1111 1111
1B == 8b
1KB == 1024 B   
1MB == 1024 KB
1GB == 1024 MB
1TB == 1024 GB
1PB == 1024 TB

-----------32位平台---------------
char   字符类型         占1字节的空间(8位二进制)
short  短字符型       占2字节的空间(16位二进制)
int    整形              占4字节的空间(32位二进制)
long   长整形         占4字节的空间(32位二进制)
float  单精度浮点型  占4字节的空间(32位二进制)
double 双精度浮点型     占8字节的空间(64位二进制)

案例:验证数据类型的长度

sizeof 测量数据类型的长度(用法如下):

#include
int mian(int argc,char *argv[])
{
    printf("sizeof(char)=%dn",sizeof(char));
    printf("sizeof(short)=%dn",sizeof(short));
    printf("sizeof(int)=%dn",sizeof(int));
    printf("sizeof(long)=%dn",sizeof(long));
    printf("sizeof(float)=%dn",sizeof(float));
    
    return 0;
}
知识点2【unsigned 和 signed】 (重要)


1、无符号数 unsigned
数据没有符号位,自身所有的二进制位都是数据位
比如:unsinger chat 0000 0000 ~ 1111 1111

2、有符号数 signed 默认一般省略
二进制的最高位为符号位,其他位为数据位。

signed char xxxx xxxx (x:0~1) 
最高位为 1 表示负数,最高位为 0 表示正数
负数:1xxx xxxx 正数:0xxx xxxx
signed cahr 的表示范围: 1111 1111~1000 0000~0000 0000~01111 1111
案例:一字节:-10 
      1000 1010(-10的原码)


      
案例:
#include
int mian(int argc,char *argv[])
{
    //定义一个有符号int
    signed int numl = 10;//    signed 默认一般省略
    int num2 = 10;    //num2也是有符号int
    
    //unsigned 表示无符号数 不能省略
    unsigned int num3 = 10;
    
    return 0;
}

知识点3【 struct 结构体 和 共用体 union】


1、struct 结构体 中的成员 拥有独立的空间

struct data1{
    char 1;
    short b;
    int c;
}//设想为大学的床位,每一个人都有自己的床位

a,b,c,就是结构体中独立的成员

2、 union 共用体 中的成员 共享同一份空间

union data2{
    char a;
    short b;
    int c;
}//设想大学宿舍的厕所,a,b,c,都可以去上一个厕所
知识点4【enum 和 void】


1、enum 枚举 将变量要赋的值一一列举出来
enum BOOL{false,true};
enum BOOL bool = false;

2、void 无类型(重要)
不能用 void 定义变量
int num;//√
void num;//× 系统不能确定给num开辟多大的空间

知识点5【其他关键字】(了解)


   auto自动类型,(自动的字节长度 auto mun;)
   register寄存器变量,
   static静态变量,
   const只读变量,
   sizeof测类型的大小,
   typedef为已有的类型 重新取一个别名
   volatile防止编译器优化
   
1、register int num;//尽量将num放入寄存器中


总结:
1、如果没有显示表明 register(int num),如果num被高频繁使用 系统也会放入寄存器中
2、register int num ;//显示将num放入寄存器中
3、寄存器的变量 不能取地址 &num

#include
int mian (int argc,char *argv[])
{
    register int num = 10;
    //%p输出地址
    printf("%pn",&num);//错误,寄存器变量不能取地址
    
    return 0;
    
}

2、typedef 为已有类型取个别名
 

#include

//给已有的int类型取个别名
typedef int INT32;

int mian(int argc,*argv[])
{
    test01();
    
    return 0;
    
}

void test01()
{
    int num1 = 10;
    INT num2 = 20;
    printf("num1 = %dn",&num1)
    printf("num2 = %dn",&num2)
}

3、volatile 防止编译器优化 强制访问内存操作
不能将常用数据存于寄存器中,必须从内存中读取,保证检测数据的及时更新
volatile int value;

知识点6【常量与变量】(重要)


1、常量 值不能被修改 (反:值不能被修改就是常量 ×)
常见的如 10 20 30 'a' "abcd"

2、变量 系统根据变量的类型 开辟对应的空间 其值可以被修改
变量名 代表的是 空间的内容
操作变量 就是 对空间内容的操作
变量名的命名规则:由数值、字符、下划线组成 但 不能以数字开头

A、num_1 B、_num1 C、1_num D、num  //其中c是错误的
int num = 10;//变量名num代表的是空间的内容

知识点7【整形常量】(了解)
十进制:0~9
八进制:0~7
十六进制:0~15

八进制 十进制 十六进制 都是整形的输出形式。

void test03()
{
    int num = 100;
    //十进制输出
    printf("十进制:num=%dn",num);
    //八进制输出
    printf("八进制:num=%on",num);
    //十六进制输出
    printf("十六进制:num=%xn",num);
    //如果加上 # ,就可以在数字前面加上一定的标识符
    //例如 
    printf("十六进制: num=%#xn",num);
    //不同进制 仅仅是数据的表现形式 不会修改数据本身(重要)

}

知识点9【整形变量的操作————读、写】取值赋值

void test04()
{
    //局部变量不初始化,内容随机
    int data = 0;
    int num = 0;
    printf("num = %dn",num);//读 取值
    
    num = 100
    printf("num = %dn",num);//读 取值
    
    data = 100;
    printf("num = %dn",num);//读 取值
    
    //从键盘输入
    printf("请输入一个int数据:");
    scanf(%d,&data);//&data 代表的事data对应空间的起始地址
    printf("num = %dn",num);//读 取值    
    
}

运行结果:
2、整形的输出形式

void test05()
{
    int num1 = 0;
    //%d 有符号int形数据输出
    printf("num1 = %dn",num1);
    
    unsigned int num2 = 0;
    //%u 无符号int形数据输出
    printf("num2 = %un",num2);
    
    long num3 = 0;
    //%ld 有符号long形数据输出
    printf("num3 = %ldn",num3);
    
    unsigned long num4 = 0;
    //%lu 有符号long形数据输出
    printf("num4 = %lun",num4);
    
    short num5 = 0;
    //%hd 有符号short形数据输出
1    printf("num5 = %hdn",num5);

    unsigned short num6 = 0;
    //%hd 无符号short形数据输出
1    printf("num6 = %hun",num6);

}

unsigned short num6 = 0;
scanf("%hu",&num6);//输入

知识点10【实型 常量】

void test06()
{
    float f = 3.14;//会有个小报错
    float f = 3.14f;//前后长度一样
    //printf("f = %fn",f);  输出float数据
    //printf("d = %lfn",d);  输出double数据
    //scanf("%f",&f);
    //scanf("%lf",&d);
    
    //不以f结尾的 实型 为double类型
    printf("sizeof(3.14) = %dn",sizeof(3.14))/8
    
    //以f结尾的 实型 为float类型
    printf("sizeof(3.14f) = %dn",sizeof(3.14f))//4

}

单精度(float)双精度(double) 
float :占4字节,7位有效数字,指数-37~38
double:占8字节,16位有效数字,指数-307~308


知识点11【字符常量和变量】
1、字符常量(char类型 0~127)和变量

void test07()
{
    //%c 输出的字符
    printf("%cn",'a');    
    
    //字符变量
    //ch 存储的是‘a’的ASCII值
    char ch = 'a';
    printf("%cn",ch);    //%c 输出的是字符
    printf("%dn",ch);    //%d 输出的是ASCII值
    
    //'a' 单引号 表示取 字符的ASCII
    //'a' == 97 完全等价
    
    ch = ch + 1;
    printf("%cn",ch);    //%c 输出的是字符
    printf("%dn",ch);    //%d 输出的是ASCII值

}

总结:
1、'a'单引号 表示取a的ASCII值
2、字符在计算机存储的是ASCII值

void test08()
{
    char ch = 'a';
    printf("%dn",sizeof('a'));//'a'表示的是97,数值默认是整形
    printf("%dn",sizeof(char));//表示的是char这个类型
    
}
void test09()
{
        char ch;
        printf("请输入一个字符:");
        scanf("%c"&ch);
        //scanf中的%c只能提取一个字符
        //ch = getchar();//获取一个字符
        //getchar();//丢弃一个字符
        
        printf("ch = %c",ch);
        printf("ch = %d",ch);
    
}

案例:提高 键盘输入“abc” 只取‘a’‘c’

void test10()
{
    //  'n'  换行
    //  ‘t'  tab
    printf("##%c##"n,'\');//两个\输出一个
    printf("##%%##"n);
    
    
    printf("%dn",'0')//48
    printf("%dn",)//0
    printf("%dn",0)//0
    printf("%dn","0")//字符0的地址,地址编号

    
}

知识点13【字符串】""双引号作用 

void test11()
{
    //%s 输出字符串
    //''取得是字符的ASCII值 ""取得是字符串的首元素的地址
    //%s 从字符串的首元素 逐个字符输出 遇到''结束
    printf("%sn","hello");
    //系统会在字符串末尾自动添加一个结束字符''
    printf("%dn",sizeof("hello"));//输出为6 原因在上面
        
    printf("%sn","hello woeld");
    printf("%sn","hello world");
    printf("%sn","hello world");
}

例如:描述'a'和"a"的区别

'a'是字符 占1字节
"a"是字符串 占2字节

void test12()
{
    printf("##############");
    //%5d 表示占5个终端位宽 右对齐
    printf('###%5d##'n,123);
    
    //%-5d 表示占5个终端位宽 左对齐
    printf("##%-5d##,"123);
    
    printf("##%05d##n",123);
    
    printf("##%-05d##n",123);//不能这么写 会改变数据加0 所以不会起作用
    
    //%5.2f 5表示总位宽为5 .2表示小数点保留两位
    printf("##%5.2fn##,"3.14159f);//3.14
}


知识点15【typedef】

为已有的类型重新 取个别名
1、用已有的类型 定义一个变量
2、用别名 替换 变量名
3、在整个表达式的前方加上typedef

案例1:
    int INIT32;
    typedef int INT32;
    
案例2:给 int arr[5] 取个别名 ARR
    typedef int ARR[5];
    ARR arr;//arr就是一个拥有5个int元素的数组

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

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

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