黑马程序员——day02、c语言知识整合(二)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


打算用三篇日志总结c语言的知识,今天是第二篇。总结可能有些不到位,我的习惯是写在本子上,然后再敲到电脑上。一般是我觉得不好掌握或者易忘的知识点。望见谅!


一、进制(java中也学习过,总结些我需要加强记忆的):

  1. 二进制以0b或0B开头,八进制以0开头,十六进制以0x或0X开头
  2. %x输出十六进制整数。%0输出八进制整数
  3. 变量在内存中的存储:int a=12;二进制为1100.内存存放由下向上,第一字节的地址就是变量的地址。
    0000 1100内存地址
    0000 0000
    0000 0000
    ^
    |
    0000 0000
    代码:int number = 12; int number2 = 13;
  4. 以下写法:.98 √ -.003 √  98f ×—> 98.0f、98.0F √  10e8.7 ×—> 相当于10乘以十的几次方,e后面的数值必须是整数
  5. 进制转换:二进制——>十进制:0b1100 = 0*2的0次方+0*2的1次方+1*2的二次方+1*2的三次方。其他进制转换与此相同。
  6. n位二进制的取值范围是0~(2的n次方-1)。int第一位是符号位,因此int取值范围是-2的31次方~2的31次方-1
  7. 类型修饰符:short、long、signed、unsigned。long int = 8l;或者long int = 8;在64位编译器中,将int扩充为8个字节,long long int 也是8个字节。在16为编译器中int为2字节,long int 为4个字节,long long int为8个字节。输出为%ld、%lld。 signed为有符号,unsigned为无符号,unsigned int的取值范围为0~2的32次方-1。输出unsigned用%u
  8. 位运算符:&、|、^、<<、>>、~ ^异或:9^5^5==9; 5^5==0;9^0==9; ~取反:相同为1,不同为0; <<左移:移几位相当于乘以2的几次方(符号位可能改变); >>右移:符号不变,移几位相当于除以2的n次方。
  9. 面试题:不使用第三方变量互换变量值  a=a^b;b=a^b;a=a^b;
char类型:字符在内存中实际上是ASCII码值
printf("%d",'A'); ——> 输出字符A的ASCII码值
printf("%c",65); ——> 输出65对应的字符

二、数组:
  1. 正确写法 int ages[5] = {10,20,21,13,23};int ages[5] ={10,19};int ages[] ={[3]=10,[4]=11};int ages[] ={12,15};int ages[3]; ages[0]=2;...  未赋值为0
  2. 错误写法 int ages[4];ages={23,12,43,53} 只能在定义同时进行初始化。
  3. 在定义时初始化元素个数必须是常量。
  4. 数组在内存中的存储,内部寻址是从上到下
  5. 数组当做函数参数传递时,会当做指针变量使用,指针变量在64位编译器环境下,占8个字节,所以数组元素个数不能在函数中计算,要传递进来
  6. 二维数组,int ages[2][3]。两个数组,每个数组中有三个元素
三、字符串:
  1. C语言中用字符数组存储字符串。"jack" == 'j' + 'a' + 'c' + 'k' + '\0'; char name[10]="jack";printf(name);有警告,printf默认接收字符串常量,不过可以编译通过
  2. 字符串正确写法:char name[8]="it";char name[8]={'i','t','\0'};char name[8]={'i','t',0};(\0的ASCII码值是0)char name[8]={'i','t'};
  3. 字符串错误写法:char name[]={'i','t'};这是字符数组,不是字符串
  4. 字符串输出%s
  5. strlen函数:计算字符串长度

     1.计算的是字符数,并不是字数。一个汉字算作3个字符

     2.计算的字符不包括\0

     3.从某个地址开始数字符的个数,直到遇到\0为止

      4.strlen函数声明在string.h文件中


四、指针

  1. 指针定义格式:变量类型 *变量名。指针变量只能存储地址。如:int a=10;int *p; p=&a; *p=5;printf("%d",a);输出结果是5!
  2. int *p中的*与*p不同。int *p可看做整体,仅仅是标志。*p才是为指向存储空间的指针。
  3. 任何指针都占有8个字节。sizeof返回unsigned long,%zd输出unsigned long。
  4. 指向数组的指针。int ages[5]={12,32,11,44,33}; int *p; p=&ages; 指针指向ages中第0个元素。p+1 指针指向第一个元素。*(p+1)取出ages[1]的值。还有一种访问方式和数组一样p[1],是访问数组第一个元素
  5. 字符串与指针:char name[]="it";name[0]='T'; 存于栈区,可改。char *name="it"; *name='T'; 运行崩溃,存于常量区,不可修改。定义字符串两种方式:① char name[]="it";变量  char *name="it"; 常量
  6. 指向函数的指针:定义的一般形式:函数的返回值类型 (*指针变量名)(形参1, 形参2, ...);函数名就代表着函数的地址

五、结构体

  1. 结构体的定义:
    struct 结构体名
    {
        类型1 变量名1;
        类型2 变量名2;
        ......
        类型n 变量名n;
    
    };
  2. 定义一个结构体变量,方式有好多种

    ①先定义结构体类型,再定义变量
    struct Student {
        char *name;
        int age;
    };
    
    struct Student stu;

    ②定义结构体类型的同时定义变量
    struct Student {
        char *name;
        int age;
    } stu;
    
    

    ③直接定义结构体类型变量,省略类型名
    struct {
        char *name;
        int age;
    } stu;
    
    

  3. 结构体的使用:

    ①引用的一般形式为:结构体变量名.成员名

    ②结构体数组:结构体数组也有3种定义方式

    struct Student {
        char *name;
        int age;
    };
    struct Student stu[5]; //定义1
    
    
    struct Student {
        char *name;
        int age;
    } stu[5]; //定义2
    
    
    
    struct {
        char *name;
        int age;
    } stu[5]; //定义3
    
    
    // 初始化
    struct {
        char *name;
        int age;
    } stu[2] = { {"MJ", 27}, {"JJ", 30} };

六、枚举

  1. 枚举的定义:enum 枚举名 {枚举元素1,枚举元素2,……};
    enum Season {spring, summer, autumn, winter}; 
  2. 枚举变量的定义:有3种方式定义枚举变量
    enum Season {spring, summer, autumn, winter};
    
    enum Season s;

    enum Season {spring, summer, autumn, winter} s;

    enum {spring, summer, autumn, winter} s;
  3. 枚举使用的注意

    ①C语言编译器会枚举元素(spring、summer等)作整型常量处理,称为枚举常量。

    ②枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值