美文网首页
20160720IOS_C

20160720IOS_C

作者: 2016AF | 来源:发表于2016-07-20 21:04 被阅读0次

    1、运算符
    取模运算符:%
    增量运算符:++ 前缀,后缀
    减量运算符:--
    +=, -=, =, /=, %=
    2、类型转换基本规则:
    (1)当出现在表达式里,有符号和无符号的char 和 short 类型都将被自动转换为int,在需要的情况下,将自动被转换为unsigned int
    (2)在包含两种数据类型的任何运算里,两个值都被转换称两种类型里较高的级别
    (3)类型级别从高到低为:long double, double, float, unsigned long long, long long, unsigned long, long, unsigned int, int
    (4)当作为函数的参数被传递时,char 和 short 会被转换为int,float会被转换为double,可以通过函数原型来阻止自动提升的发生
    强制转换类型:(type) 变量名
    3、函数
    返回值类型 函数名(参数列表) //没有参数就用void , 形参:函数里声明的参数,实参:传递给参数的值
    {
    statement;
    }
    4、关系运算符
    <, <=, ==, >=, >, !=
    5、for循环
    for (count = 1; count <= NUMBER; count++)
    {
    statement;
    }
    可以使用逗号运算符在for循环中使用多个初始化或更新表达式
    for (a = 1, b = 2; a < 100; a++, b++)
    {
    statement;
    }
    逗号运算符:从左到右执行
    6、do while循环
    do
    {
    statement;
    } while (boolean)
    7、数组
    type arrayName[size];
    数组元素编号从0开始,直到size-1
    char数组,并且存在的最后一个元素是 \0 ,则该数组是字符串
    C90, c99:
    int m = 3, n = 4;
    int arr1[m], arr[n]; c90不允许,c99允许
    初始化:type arrayName[size] = {值列表};//当数值数目少于数组元素数目时,多余的数组元素被初始化为默认值
    const type arrayName[size] = {值列表};//定义只读数组
    变量和数组元素未初始化的数值是不确定的
    指定项目初始化:
    int arr[6] = {[5] = 212};//C99 把arr[5]初始化为212
    指定项目初始化注意事项:
    int day[12] = {31, 28, [4] = 31, 30, 31, [1] = 29};
    各元素的值: 0->31, 1->29, 2->0, 3->0, 4->31, 5->30, 6->31, 7->0, 8->0, 9->0, 10->0, 11->0
    数组和指针:
    arr[3]恒等于
    (arr + 3)
    &arr[3]等于arr + 3
    变长数组:
    并不表示在创建数组后,可以修改其大小。变长数组的大小在创建后就是保持不变的,“变”的意思是说其维大小可以用变量来指定
    int sum2d(int rows, int cols, int ar[rows][cols]);
    int sum2d(int, int, int ar[][]);//C99
    8、if语句
    if (expression)
    {
    statement;
    }

        if (expression)
        {
            statement;
        }
        else //else与最近的if配对
        {
            statement;
        }
    9、getchar(), putchar();
        char ch = getchar();//接收一个字符
        putchar(ch);//输出一个字符
    10、ctype.h  系列字符函数
        isalnum() 字母或数字
        isalpha() 字母
        isblank() 空白字符(空格、水平制表符、换行)
        iscntrl() 控制符
        isdigit() 阿拉伯数字
        isgraph() 除空格以外的字符
        islower() 小写字母
        isprint() 可打印字符 
        ispunct() 标点符号
        isspace() 空白字符:空格、换行、走纸、回车、垂直制表符、水平制表符
        isuper() 大写字母
        isxdigit() 十六进制数字字符
        tolower() 返回小写字符
        toupper() 返回大写字符
    14、逻辑运算符
        &&, ||, ! 具有短路性
        #include <iso646.h> 后,可以使用 and, or, not
    15、stdbool.h
        提供bool,true,false的定义,使用布尔类型时需要include
    16、条件运算符
        expression ? if-true-expression : if-false-expression;
    17、循环辅助语句 continue, break
        continue:
            (1)忽略剩余代码,进行下一次迭代
            (2)位于嵌套结构中,忽略里层循环
        break:
            终止循环
    18、switch语句
        switch(expression)
        {
            case exp1:
                statement;
                break;  //如果没有break会往下执行
            default:
                statement;
                break;
        }
    19、goto语句
        (1)定义标签
            标签名:
        (2)跳转
            goto 标签名;
    20、缓冲分类
        完全缓冲I/O, 行缓冲I/O
        对于完全缓冲输入来说,缓冲区满时被清空(内容被发送至其目的地),这种类型的缓冲通常出现在文件输入中,缓冲区的大小取决于系统,但512字节和4096字节是常见的值
        对于行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区,键盘输入是标准的行缓冲,按下回车键将清空缓冲区
    21、file_efo.c
        #include <stdio.h>
        #include <stdlib.h> //为了使用exit()
        int main()
        {
            int ch;
            FILE *fp;
            char fname[50];
            printf("Enter the name of the file:");
            scanf("%s", fname);
            fp = fopen(fname, "r");
            if(fp == NULL)
            {
                printf("Failed to open file. Bye\n");
                exit(1);
            }
            while((ch = getc(fp) != EOF)
            {
                putchar(ch);
            }
            fclose(fp);
            return 0;
        }
    22、函数
        返回值类型 函数名(类型 参数名, 类型 参数名)
        {
            
        }
        void fuc();//不会进行参数检查
        void fuc2(void);//表明该函数确实不使用参数,编译器就会检查确实有没有使用参数
        递归:
            调用自己的函数称为递归
            递归函数必须在某一条件下返回确定的值,否则产生无限调用
        对形参使用const修饰符,编译器会把形参当作常量来对待,无法修改
    23、地址运算符 &
    24、取值运算符 * 也叫间接运算符
        声明一个指针: 类型 * 指针名
        指针可以作为函数的参数
        取指针地址——指针变量同其他变量一样具有地址和数值,使用运算符&可以的饿到存储指针本身的地址
        常量或非常量数据的地址赋给指向常量的指针是合法
        只有非长脸该数据的指针才可以赋给普通的指针
        const int * pc;//指向常量int类型的指针,指针可改,数据不可改
        int * const pc2;//常量指针,指针不可改,数据可改
        const int * const pc3;//指针不可改,常量不可改
        定义指向多维数组的指针: int (* pz)[2];//pz指向一个包含2个int值的数组
        指针之间的赋值规则比数值类型的赋值更加严格,类型不同就不行
    25、复合文字
        创建一个包含两个int值的无名称数组:
            (int [2]) {10, 20}
            (int []) {10, 20, 30}
    26、字符串I/O
        gets(字符串数组名):最后一个元素是\0,返回获取的字符串的地址,如果出错或gets()遇到文件结尾,返回一个空地址
        puts(字符串|字符串数组);
        字符串数组初始化:
            (1)char array1[size] = "this is a string.";
            (2)char array2[size] = {'t', 'h', 'i', 's', 'i', 's', 'a', 's','\0'};//这种方式最后一个元素必须是\0,多余的数组会被初始化为\0
        区别:
            char heart[] = "I love";//不能用于++, --
            char *head = "I like";//可用于++, --
            主要区别在于数组名heart是个常量,而指针head则是个变量
            head = heart;//合法
            heart = head;//非法
        fges()函数:多用于文件读取
            (1)第二个参数来说明最大读入字符数,如果这个参数值为n,fgets()就会读取最多n-1个字符或者读完一个换行符为止
            (2)如果fgets()读取到换行符,就会把它存到字符串里,而不是想gets()那样丢弃它
            (3)第三个参数来说明读哪一个文件。使用stdin作为参数,从键盘上读数据
        scanf(), gets():
            scanf更基于获取单词而不是获取字符串,gets函数会读取所有的字符,直到遇到第一个换行符为止
        puts(地址参数):参数是一个地址
            显示字符串时自动在其后添加一个换行符,直到遇到空白字符\0
        fputs()函数:多用于文件读取
            第二个参数说明要写的文件,使用stdout作为参数来进行输出显示
            fputs()并不为输出自动添加换行符
    27、字符串函数 string.h 
        strlen()函数:返回字符串的长度
        strcat()函数:两个参数为char * 类型,将第二个参数附加到第一个参数后面
        strncat()函数:三个参数,第三个指定第二个参数添加到第一个参数的长度,当加到足够字符或遇到空字符时停止
        strcmp()函数:两个字符串参数,a1>a2返回1,a1=a2返回0,a1<a2返回-1
        strncmp(a1, a2, int)函数:第三个参数指定a1, a2比较的字符串长度
        strcpy(a1, a2)函数:把a2的内容复制到a1,要保证a1的控件足够大容纳,返回第一个参数的字符的地址,第一个参数可以使数组中的中间的一部分
        声明一个数组将为数据分配存储控件,而声明一个指针只为一个地址分配存储空间
        strncpy(a1, a2, length):第三个函数指明最大可复制的字符数,如果a2比length大,则没有添加空字符,因此需要设置n为目标数组大小减1,然后将最后一个数组元素赋值为'\0'
        sprintf(存储, 转换说明字符, 项目列表)函数:跟printf类似,将结果存储到存储地址里
        
        常用:
            char *strcpy(char * s1, const char * s2);
                把s2指向的字符串(包括空字符)复制到s1指向的位置,返回值是s1
            char *strncpy(char * s1, const char * s2, size_t n);
                把s2指向的字符复制到s1指向的位置,复制的字符数不超过n个,返回值是s1.空字符后的字符不被赋值,如果原字符串的字符数少于n个,在字符串中就以空字符填充。如果源字符串的字符数大于或等于n个,空字符就不被赋值,返回值是s1
            char *strcat(char * s1, const char * s2);
                s2指向的字符串被复制到s1指向字符串的结尾,复制过来的s2所指字符串的第一个字符覆盖了s1所指字符结尾的空字符,返回值是s1
            char *strncat(char * s1, const char * s2, size_t n);
                s2字符串中只有前n个字符被追加到s1字符串,复制过来的s2所指字符串的第一个字符覆盖了s1所指字符结尾的空字符,s2字符穿中的空字符及其后的任何字符都不会被赋值,并且追加一个空字符到所得结果后面,返回值是s1
            int strcmp(const char * s1, const char * s2);
                如果s1字符串在机器编码顺序中落后于s2字符,函数的返回值是一个整数;如果两个字符串相同,返回值是0;如果第一个字符串在机器编码顺序中先于第二个字符串,返回值是一个负数
            int strncmp(const char * s1, const char * s2, size_t n);
                函数的作用和strcmp()一样,只是比较n个字符后或者遇到第一个空白字符时会停止比较,由二者中最先被满足的那一个条件终止比较过程
            char * strpbrk(const char * s1, const char * s2);
                返回一个指针,指向字符串s1中存放s2字符中的任何字符的第一个位置,如果没有找到任何字符,返回空指针
            char *strrchr(const char * s, int c)
                返回一个指针,指向字符串s中字符c最后一次出现的地方(标志结束的空字符是字符串的一部分,因此也可以搜索到它),如果没找到该字符,函数就返回空指针
            char *strstr(const char * s1, const char * s2)
                返回一个指针,指向s1字符串中第一次出现s2字符串的地方,如果在s1中没找到s2字符串,函数就返回空指针
            size_t strlen(const char * s)
                返回s字符串中的字符个数,其中布包裹标志结束的空字符
            char *strcpy(char * s1, const char * s2)

    相关文章

      网友评论

          本文标题:20160720IOS_C

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