• 黑马程序员_ C语言基础(一)


    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

     

    开发过程:


    编写->编译(只编译源文件,编译成*.o  只会检测语法是否合理,不会检测函数是否存在)->链接(将所有相关的.o文件和C函数库整合成可执行文件  会检测函数是否定义)->运行


    第一部分:

    1.预处理指令:在编译之前执行的指令(eg:include <stdio.h>)。
     注:系统自带文件用< >,自己写的用"".( eg:include "1.txt");
     .h是头文件,用来函数声明
    地址:每个字节的系统编号。
    注:变量和函数名 由字母、数字、下划线组成,第一个必须是字母或下划线。

    2.如果没有返回值,默认返回int类型。不知道返回值可使用void(void代表不需要返回值).

    3.函数问题:
         (1)只能有一个主函数(main函数  主函数是整个语言的入口)
         (2)自定义函数一般要放到main函数前(如果放在主函数后,则要在主函数前对自定义函数进行声明)。
         (3)不能重复定义函数。可重复声明函数。
       注:如果要将自定义函数放main函数后,则首先要在main函数前声明,然后在main函数中调用。 
    头文件用来声明函数,普通文件用来定义函数。

    4.字符问题
     
     数据类型所占用编译器长度(单位:字节 )
     字节分配规则:由大到小,优先分配地址大的(只要变量被定义,变量地址就被分配  每个字节8位)。
     
       

    5.基础运算:

      逗号表达式: 用逗号连接起来的表达式,形式为 表达式1,表达式2,表达式3,.....,表达式n
           运算方法为从左至右,返回值为最后一个表达式的值。

       sizeof( ):用来计算一个变量、常量或数据类型所占用的内存字节数。
       printf() 函数从右往左进行运算。
     a++,++在后面的是碰到;号才加1,但是加了括号,就先运算,不碰到;也可以先加。
     注:任何非0值都为真。
       
    signed和unsigned的区别:
       signed:有符号位,最高位表示符号;0为整数,1为负数。eg:32位的最大有效数是2的31次方减1。    
       unsigned:无符号位,最高位继续为有效位。eg:32位的最大有效数是2的32次方减1。

    注:相同类型的类型说明符不能放一起修饰,例如short和long不能放一起使用。

    6.字符类型
        %d     int
        %f      float、double
        %ld    long
        %lld    long long
        %c      char
        %s       字符串
        %zd     unsigned long 

    7.getchar,putchar,gets,puts区别
       getchar:输入一个字符。
         缺点:
           输入流程:输入设备->内存缓冲区->程序getchar 
           用户输入的字符会首先存放在缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中),然后再使用getchar读取缓冲区中的内容,也就是说getchar( )会将回车建输出
      
       putchar:输出一个字符
       gets:输入一个字符串
       puts:输出一个字符串

    8.scanf特别注意点
      1>scanf语句从前往后开始匹配,如果匹配到不相同的,则结束输入。
      2>当scanf中参数之间分隔符是空格是,输入点可以用空格、tab和回车键代替。
      3>如果指定了接受数据长度,则最后多余长度的会自动省略


    第二部分:


    1.预处理指令:
          定义:1>预处理指令是在程序开始编译前就已经编译完毕了。预处理指令
                    2>全部是#开头。
         分类: 宏定义、条件编译、文件包含
         作用域:从编写指令开始,一直到文件结尾。

    2.宏定义(替换代码)
     关键词:#define 宏名 值    (宏定义只负责换代码,并不负责运算   值中每个参数要加( ))
       eg:#define count 4  //会将程序中所有count 转化成4  如果代码中是“count” 则此count不会被替换
        #undef  取消define宏的作用。
        注:宏名使用大写,变量名用小写。eg:#DEFINE

    3.条件编译(文件编译时存在)
        #if()
            A //如果只编译了A,则下面的B和C不会保存在内存中 
        #elif()
            B
        #else()
            C
        #endif  
     注:1>条件编译只编译宏中定义的语句,且如果elif或else没有判断,则此没有保存在内存中(不参与编译的不会保存在内存中)。
            2>endif必须添加
     #if defined() 相当于 #ifdef
    #if undefined 相当于#ifndef

    4.文件包含
        注:不允许循环包含(互相包含)。
     防止多次包含方法:
      #ifndef  ...
       #define  ...
             .....
     #endif

    eg: #idndef _TEST  // 如果没有定义_TEST,则会运行以下,就是声明test( )函数,如果定义了,就不会进行声明,防止了文件重复包含
            #define _TEST
                test();
          #endif


    5.类型定义 typedef (取别名)
        eg:#typedef int myint;    将int类型的别名定义为myint
        使用场合:
            1>基本数据类型
                typedef int myint;
            2>指针
                typedef  char *  p;//p是名字
            3>结构体
                typedef struct student
                    {
                    int age;
                    } stu;   //类型名是stu
                (1)定义结构体的指针:
                    typedef struct student  * p;//p是名字
            4>枚举    
            5>指向函数的指针
                    typedef int (*name)(int , int) //name是定以后的名字

    6.static和extern
        6.1对函数的影响
         外部函数:定义的函数能被本文件和其他文件访问。(函数默认为外部函数)(其它文件可访问)
            注:外部函数不能有重名
         内部函数:定义的函数只能被本文件访问,其他文件不能访问。(只有本文件访问)
             注:内部函数可以不同文件中函数重名
         extern:声明或定义此函数是外部函数。
            eg:extern void test();
         static:声明或定义此函数是内部函数。

        6.2 对变量的影响
            全局变量分类:
                外部变量:定义的变量能被本文件和其他文件访问。(其它文件可访问)
                    注:不同文件中的同名外部变量,都代表着同一个变量。
                内部变量:定义的变量只能被本文件访问(只有本文件访问)

          static对局部变量影响
                (1)延长局部变量生命周期,局部变量就不会随着函数调用结束就被销毁,而是等到程序结束后才被销毁。
           (内存空间中一直有此变量)    
                (2)没有改变局部变量的作用域。

            使用范围:
                (1)某些变量值保持不变。
                (2)某些变量值使用频繁

  • 相关阅读:
    Qt线程的简单使用(四)——QSemaphore的使用
    Qt线程的简单使用(三)——通过一个实例理解QMutex的使用
    Qt线程的简单使用(二)——通过继承QThread()创建线程
    Qt线程的简单使用(一)——通过QObject::moveToThread()创建线程
    高斯投影与UTM的异同
    基于Qt的Tcp协议的流程图
    OC系列高级-block
    OC系列foundation Kit基础-NSDate
    OC系列高级-内存管理关键字
    OC系列高级-NSValue
  • 原文地址:https://www.cnblogs.com/yaochao/p/4033596.html
Copyright © 2020-2023  润新知