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

    1.数据类型,int,short,long的统一占位符级别都可以使用%d 有符号的数据类型默认定义的变量或者是si...

  • JNI入门

    入门NDK01[ https://gitee.com/xiachenhui/JNI01.git ] 对象与线程ND...

网友评论

      本文标题:NDK01

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