NDK01

作者: 星云春风 | 来源:发表于2020-05-19 00:33 被阅读0次

    1.数据类型,int,short,long的统一占位符级别都可以使用%d

    • 有符号的数据类型
      默认定义的变量或者是signed修饰的就是有符号的
    // 默认定义的变量,就是有符号的
        int age = 99;
         printf("age = %d\n", age);
         short age2 = 80;
         printf("age2 = %hd \n", age2);
         long number = 123445;
         printf("number = %ld\n", number);
         char sex = 'M';
         printf("sex = %c", sex);
    
    • 无符号的数据类型
      unsigned修饰的是无符号的
     //unsigned修饰的是无符号的
      unsigned int age = 99; //4个字节
        printf("age = %u,占用字节数=%d\n", age, sizeof(age));
        unsigned short age2 = 80; //2个字节
        printf("age2 = %hu,占用字节数=%d \n", age2, sizeof(age2));
        unsigned long number = 123445;  //4个字节,java中是8个字节
        printf("number = %lu,占用字节数=%d\n", number, sizeof(number));
        unsigned char sex = 'M'; //1个字节
        printf("sex = %c,占用字节数=%d", sex, sizeof(sex));
        //这个可以修改字节数
        long long number2 = 123445;  //8个字节 相当于java中的Long
        printf("number = %lu,占用字节数=%d\n", number, sizeof(number2));
    
    • 区别
      最大的区别是取值范围不一样,占位符也不一样,但是所占字节数一样
    • long 和int 都是4个字节,为何?
      答: long类型和int类型,在早起16位电脑的时候,int是2个字节,long是4个字节,但是经过发展,电脑已经成了32位或者64位,就导致了int 和long 都是4位字节了。
      在C99的标准中,long最小要为int的占用字节数
    • 布尔类型
      C99的标准中,非0是true,其他是false
    • 浮点型
      float 字节-4个字节,精度-6位小数,占位符-%f
      double 字节-8字节,精度-15位小数,占位符-%lf
      long double 字节-8字节,精度-19位小数,占位符-%Lf,但是使用printf的时候需要加 #define __USE_MINGW_ANSI_STDIO 1 于 #include <stdio.h> 之前,否则会打印出0.00
    • 字符串
      字符串有3种写法 ,*代表是指针,*可以在不同的位置,一个*代表一级指针,2个*代表2级指针,以此类推,一般很少有4位以上的。
     char *str = "这是字符串"; 这种写法是标准
     char * str = "这是字符串";
     char* str = "这是字符串";
    
    • 数组
      1 . 必须把[ ]放在变量前面 ,(int[] test这是错误的写法)。
      2 . 必须给定存储的空间或者直接初始化 ,int test[8] 或者int test[] ={1,2,3,4};
      3 . 数组的内存地址和数组的首位数据的内存地址一致
      int test[] = {1, 3, 2, 47, 51};
        printf("数组长度: %d\n", sizeof(test));
        for (int i = 0; i < (sizeof(test) / sizeof(int)); ++i) {
            // * 是取出内存地址中的值 ,数组是一块连续的内存空间
            //  printf("test的内容: %d\n", *(test + i));
            //传统方式
            // printf("test的内容: %d\n", test[i]);
            // 数组的内存地址的占位符 %x ,#代表以16位进制展示
            printf("test的内存地址: %#x\n", test+i);
        }
    输出结果: 
    test的内存地址: 0x61fe00
    test的内存地址: 0x61fe04
    test的内存地址: 0x61fe08
    test的内存地址: 0x61fe0c
    test的内存地址: 0x61fe10
    
    • 动态申请内存
      1 .动态申请的内存在堆中,其他的是在栈区中。
      2 .如果是大空间的使用,就需要在堆中,否则一般都是在栈中
     int *p1; //悬空指针  ,这样定义的是在栈区
        // 动态申请的时候,内部会检测,是否还有可用的内存。可能会拿到其他东西剩下的内存,可能会有值,所以要清空
        int *p3 = calloc(10, sizeof(int));//堆中申请的
        //初始化 清空,防止有脏数据
        memset(p3, NULL, 10 * sizeof(int));
        //释放 ,否则不会回收
        free(p3);
        // 释放之后 p3此时是个野指针
        p3 = 0; //置位0,NULL就是0
    
    • C和C++的区别?

    1 . C是面向过程的,一个一个的函数,没有类,没有面向对象
    2 . C++是面向对象的,思想和java一样

    相关文章

      网友评论

          本文标题:NDK01

          本文链接:https://www.haomeiwen.com/subject/gpmmohtx.html