IOS开发OC基础知识(四) 数据类型

172 阅读8分钟

整型常量

10;

    // 实型常量(小数)
    // 单精度float / 双精度double
    // 注意: 默认情况下编写的小数都是双精度的实型常量, 也就是默认情况下所有小数都是double
    10.1;// 双精度double
    88.8;// 双精度double
    5.2f; //单精度float
    // 字符型常量, 用单引号括起来的就是字符型常量
    // 注意: 字符型常量的单引号中只能写一个字符, 如果写多个会报错
    'a'; // 字符型常量
    'ab'; // 错误
    '1';
    '12'; // 错误, 12是由两个字符组成, 由1和2组成
    // '李'; // 错误写法, 因为一个汉字占3个字节
    // 字符型常量的特殊情况, 在C语言中, 系统给某些字符的组合定义了特殊的函数, 这些字符的组合可以当做单个字符来使用
    '\n';
    // 字符串型常量, 用双引号括起来的就是字符串型常
    // 注意: 无论你用双引号括起来了几个字符, 只要使用双引号括起来的都是字符串常量
    "abc";
    "a";

变量的基本概念

    /*
    // 1.申请一块存储空间, 也就是定义一个变量
    // 定义变量的格式: 数据类型  变量名称;
    // 定义一个基本数据类型的变量
    // int float double char
    int number; // 定义了一个名称叫做number的变量
    // 会在内存中开辟一块存储空间给number, 用于存储数据
    int value; // 定义了一个名称叫做value的变量
    // 又会在内存中开辟一块存储空间给value, 用于存储数据
    */

    /*
    // 连续定义, 如果多个变量都是相同类型的, 那么可以采用连续定义
    int number, value;
    // 如何往变量对应的存储空间当中存储数据
    // 注意: 变量中不能随便存储数据, 只能存储与之对应的数据
    // 概念: 变量的第一次赋值, 我们称之为初始化,
    // 注意, 要想使用变量都必须先对变量进行初始化, 然后才能够使用
    // 如果不对变量进行初始化, 那么其实变量中存储的是一些垃圾数据
    number = 10; // 会将等号右边的数据放到等号左边的变量对应的存储空间中

    // 如何使用变量
    // 占位符号, %号是占位符号的起始符号
    printf("%i\n", number);
    float floatValue; // 定义了一个实型的变量
    floatValue = 10.1f; // 往floatValue对应的存储空间中存储了10.1这个值
    printf("%f\n", floatValue);
    int intValue, age; // 定义了一个整型的变量
    printf("%i\n", intValue);
    printf("%i\n", age);
    */

    // 初始化的两种方式
    /*
    // 1.先定义再初始化
    int number;
    number = 10;
    // 2.定义的同时初始化
    int value = 10;
     */

    // 3.完全初始化
    //int number, value;
    //number = value = 10;
    int number;
    number = 10;
    int value;
    value = number;

    // 4.部分初始化
    // int number, value = 10;

变量的作作用域

    /*
    //    number = 10;
    int number; // 变量有自己的作用域
    // 变量的作用域从定义的哪一行开始, 直到大括号结束或者遇到return为止
    number = 10;
    printf("return之前");
    return 0; // 结束函数, 只要执行到return就和执行到}一样, 代表着函数结束了
    //printf("%i", number);
     */
     
    //call();
    //number = 50;
    /*
    {
        int number;
    }
    number = 50;
     */
    /*
    int number;
    {
     // 自己没有找粑粑
        number = 10;
        printf("%i", number);
    }
     */

    /*
    int number;
    //int number; // 同意范围内不能出现同名的变量
    {
        // 1.如果自己对应的范围中有, 就使用自己的
        // 2.不同的范围中可以有相同名称的变量
        int number;
        number = 10;
        printf("%i\n", number);// 10
    }
    printf("%i\n", number);// 0
    */

    // 内存寻址从大到小, 如果按照这种规则, 那么先定义的变量内存地址一定大于后定义的变量
    int number = 0;
    int value = 0;
    // 如何获得变量的详细地址(变量的地址), &变量名称
    // 利用%p占位符来打印变量的详细地址
    // 输出的是一个十六进制的数
    //  a/ b/ c/ d/ e/ f/
    // 10/11/12/13/14/15
    printf("%p\n", &number);
    printf("%p\n", &value);

printf

    //   折叠代码的快捷键 : command + option + 方向键
    //   单行注释的快捷键: command + /


    /*
    int number = 10;
    int value = 20;
    printf("%i, %i\n", number, value);
    float floatValue = 10.1f;
    printf("%f\n",floatValue);   
    char charValue = 'a';
    printf("%c\n", charValue);    
    double doubleValue = 9.9;
    printf("%lf", doubleValue);
     */
    
    /*
    // 1.指定位宽
    // 如何指定位宽? %mi; // 其中m就是位宽 而i输出对应类型的数据
    // 默认情况下位宽是右对齐, 如果需要输出的类型宽度不够, 会在左边补空格
    // 如果在位宽前面加上-号, 就会改变位宽的对齐方式为左对齐,如果需要输出的类型宽度不够,会在右边补空格
//    int number = 99;
//    printf("%5i!!!", number);
//    printf("%-5i!!!", number);
    
    // 注意: 如果指定了位宽, 但是实际输出的内容超出了宽度, 会按照实际的宽度来输出
//    int number = 9999;
//    printf("%2i", number);
    
    // 可以在位宽前面加上0, 如果输出的内容宽度不够就会用0来补, 如果宽度已经够了, 那么会按照实际的宽度输出
    int number = 8;
    // 01
    // 2015-06-05
    printf("%02i", number);
     */
    
    /*
    // 2.保留位数
    // %f默认会保留6位小数
    // 指定保留多少位小数: %.nf, 其中n就是需要保留多少位小数, f用于输出实型
    float floatValue = 3.14;
    printf("%.2f", floatValue);
     */
    
    /*
    // 3.%f各种坑
    // 为什么指定保留10位之后还不对呢? 因为float类型有效位数是7位(不包括小数点)
    // 如何计算有效位? 从第一个数开始计算
    // 如果输出的数据超出了有效位数, 那么就会出现一些垃圾数据
    float floatValue = 3.1415926525;
    printf("%.10f\n", floatValue); // 默认情况保留6位
    
    // 如何想完整的输出那么必须将数据保存位double类型, 因为double类型的有效位是15位
    double doubleValue = 3.1415926525;
    printf("%.10lf\n", doubleValue);
     */
    
    // 如何提高比格
    float floatValue = 3.1415926;
    printf("%.*f", 5,floatValue);
    return 0;

scanf函数

/*
    // 要求: 存储用户输入的整数
    // 1.用户输入的整数确定吗? 不确定 --> 定义变量
    // 2.如何接收用户输入的整数? scanf函数
    // scanf格式: scanf("格式化字符串", 列表项); --> scanf("%i", 变量);
    
    // 1.定义变量
    int number;
    // 2.利用scanf函数接收用户输入的数据
    scanf("%i", &number);// 注意: 必须告诉scanf函数变量的详细地址, 才能存储用户输入的数据
    // 3.输出接收到的数据
    printf("number = %i", number);
     */
     
    // 要求从控制台接收用户输入的两个整数, 然后计算两个整数的和
    /*
    // 0.提示用户输入数据
    printf("亲, 请输入第一个数字, 以回车键结束\n");
    // 1.定义两个变量保存用户输入的数据
    int num1, num2;
    // 2.利用scanf接收用户输入的数据
    // 2.1接收第一个数
    scanf("%i", &num1);
    printf("亲, 请输入第二个数字, 以回车键结束\n");
    scanf("%i", &num2);    
    // 3.将接收到的两个数相加
    int result = (num1 + num2);    
    // 4.输出两个数验证结果
    printf("result = %d", result);
     */

    /*
    int num1, num2;
    num1 = num2 = 10;
    printf("num1 = %i, num2 = %i", num1, num2);
     */
    
    /*
    // 0.提示用户输入数据
    printf("亲, 请输入两个数字, 以回车键结束\n");
    // 1.定义两个变量保存用户输入的数据
    int num1, num2;
    // 2.利用scanf接收用户输入的数据
    // 注意: 利用scanf接收多个数据的时候, 输入的内容要求和"格式化字符串"中的一模一样
    // 如果输入的数据与格式化字符串中的不匹配, 那么scanf函数会自动终止
//    scanf("%i,%i", &num1, &num2);
    // 如果多个数据之间没有其它字符, 那么可以利用 空格, 回车, table来作为分隔
    // 但是, 如果格式化字符串中有%c除外
//    scanf("%i%i", &num1, &num2);
    char charValue;
    // 输入: 123-->num1, a -->charValue, 456-->num2

    // 技巧: 无论想接收什么类型的数据, 只要有需要一次性接收多个, 就给每一个数据之间加上固定的符号作为分隔符(例如: ,)
    scanf("%i-%c-%i", &num1, &charValue, &num2);    
    // 3.将接收到的两个数相加
//    int result = (num1 + num2);    
    // 4.输出两个数验证结果
//    printf("result = %d", result);    
    printf("num1 = %i, char = %c , num2 = %i", num1, charValue, num2);
     */
    
    int number, number2;
    // \n代表换行
    // 如何告诉scanf函数我们输入完毕? 回车 == \n
    // 因为回车是scanf的结束符, 所以不能在scanf的格式化字符串末尾写上\n
    // 如果不小心把\n放到了scanf格式化字符串的末尾, 也可以破, 原样输入或输入一个不匹配的类型
    scanf("%i\n%i\n", &number, &number2);
    printf("number = %i , number2 = %i\n", number, number2);

scanf实现原理

// 添加断点快捷键: command + \    
    // 1.提醒用户
//    printf("请输入两个整数 , 整数之间用逗号隔开, 使用回车结束\n");

    // 2.定义变量保存用户输入的数据
    int num1, num2;
    char charValue;

    // 3.接收用户输入的数据
    // num1 = 123, charValue = + , num2 = 456
    scanf("%i%c%i", &num1, &charValue, &num2);

    // 4.求差
//    int result = num1 - num2;

    // 5.输出验证
//    printf("result = %i\n", result);
    printf("num1 = %i, cahrValue = %c, num2 = %i\n", num1, charValue, num2);
    
    // 用户输入-->输入缓冲区-->scanf   
    char charValue2;
    int num3;
    // scanf只要输入缓冲区中有内容, 就不会要求用户输入数据
    scanf("%c%i", &charValue2, &num3);
    printf("charVaue2 = %c, num3 = %i\n", charValue2, num3);