zoukankan      html  css  js  c++  java
  • C语言总结2

    12).预处理指令

    1. 什么叫做预处理代码.

    以#开头的代码就是预处理代码  #warning #import

    2. 手写1个C程序的步骤.(面试题)

        1>编写代码

        2>编译

            1)执行.c中的预处理代码

            2)检查语法

        3>链接

        4>执行

    3. 预处理指令的分类.(面试题)  ******

        1>文件包含指令  #include

        2>宏定义  #define    (用来替换代码)

        3>条件编译 #if  (满足一定的条件才编译)

    4. 预处理指令的特点.

        1>都是以#开头

        2>后面没有分号

        3>在编译的时候,检查语法之前进行

    "注意

    以#开头的代码就是预处理代码

    13).sizeof运算符

    sizeof运算符的作用?

    作用:计算常量,变量在当前系统上内存中所占的字节数

    sizeof (数据类型)

    sizeof (变量)-----用的最多!

    sizeof (常量)

    注意,

    char类型的变量在内存中占1个字节;

    char类型的常量在内存中占4个字节;

    综上所述,为了安全起见,sizeof后面最好加上括号!

    14).按位异或

    ^ 异或运算

    不同为1,相同为0

    注意:

        1 相同整数相^的结果是0;

        2 一个整数^另一个整数2次结果不变 ; 3^2^2 = 3

    3 整数相^跟顺序无关 3^2^3 = 2^3^3 = 2

    15). 按位左移或者右移

    1,按位左移运算. <<

        参与按位左移运算的二进制数据. 向左移动指定的位数. 低位不够补0 高位溢出就丢弃

    2,按位右移. >>

    参与按位右移的二进制数据.向右移动指定的位数. 低位溢出丢弃,高位补符号位.

    左移

        1). 左移运算有可能会改变其正负性.

        2). 将1个数左移n位,相当于将这个数乘以2的n次方.

    右移

        1). 右移运算不会改变正负性.

    2). 将1个数按位右移n位.相当于这个数除以2的n次方.

    16).深入变量的细节

    一,变量在内存中的存储

    1,在为变量分配字节空间的时候,是从高地址向低地址分配的

    2,存储的时候,是低位存储在低字节,高位存储在高字节.

    二,变量的地址

    3,变量的地址是组成这个变量的低字节的地址.

    4,使用&取地址可以取出变量的地址

    17).数组地址问题

    1.数组的地址 == 数组名 == 数组中的低字节的地址 == 数组中下标为0的元素的地址 == 数组中下标为0的元素的低字节的地址.

    2,使用 %p 来打印数组名

    18).二维数组与函数

    1,当二维数组作为函数的参数的时]候.会丢失这个二维数组的行数和列数,解决方案是把行数和列数传递过来

    2,当二维数组作为函数的参数的时候,要保证实参二维数组的列数必须要和形参二维数组的列数一致.

    一个一劳永逸的方法是,写参数的时候,先写行数和列数,最后再写二维数组,然后二维数组的列数用参数指定.

    void test2(int rows,int cols,int arr[][cols]);

    19). 使用字符数组存储字符串注意的地方

    1). 如果没有指定数组的长度.,那么数组的长度就为字符串的长度+1

    2). 如果指定了长度,字符数组的长度就是指定的长度

    3). 如果指定的字符数组的长度小于等于了字符串的长度,这个时候就会有问题了.

    就会出现存储不下的情况.(不要指定长度)

    4). 如果在声明1个字符数组的同时我们就初始化1个字符数据给这个数组,

    那么这个时候是可以用中文.

    20).指针

    指针是一个数据类型,这数据类型可以用来定义变量,定义什么变量,指针变量,那这个指针变量是用来干什么的,专门用来保存地址的!

    block是一个数据类型,这数据类型可以用来定义变量,定义的这个变量用来保存一段代码块!!

    21). 指针作为函数的参数

    1,指针作为函数的参数,在函数的内部去访问参数指针指向的变量的时候,其实访问的就是实参变量.

    2, 指针作为函数的参数,可以实现什么效果?

        函数的内部可以修改实参变量的值.

    3. 什么时候需要将指针作为函数的参数?

        当函数需要返回多个数据的时候就可以使用指针作为函数的参数.

        如何实现的?

        使用指针作为函数的参数. 让调用者将自己的变量的地址传递到函数的内部

        函数的内部通过指针就可以修改实参变量的值.

    4,返回数组最大值和最小值的思路

        1>让调用者传递两个变量的地址给我.

        2>让调用者自己先准备两个变量.然后将这两个变量的地址给我.

        3>函数内部是不是可以通过指针 直接 修改 调用者的变量的值.

        *pMax = max; //把最大值赋值给pMax指针指向的变量.

    *pMin = min;//把最小值赋值给pMin指针指向的变量.

    22).指针为什么要分类型

    1, 指针变量的类型决定了 通过这个指针找到字节以后 连续操作多少个字节空间.

    2, 指针的类型如果不和指向的变量的类型相同话. 那么通过指针就无法正确的操作指向的变量.

    注意:

               p1[n] = *(p1+n); 前提是p1是1个指针变量.

    不忘初心,方得始终
  • 相关阅读:
    如何节省 1TB 图片带宽?解密极致图像压缩
    微信亿级用户异常检测框架的设计与实践
    一文带你深度解析腾讯云直播答题方案
    kafka数据迁移实践
    揭密微信跳一跳小游戏那些外挂
    从蓝光到4K,腾讯视频高码率下载背后的技术
    GridControl列自动匹配宽度
    access的逻辑类型
    NPOI Excel类
    Access sql语句创建表及字段类型
  • 原文地址:https://www.cnblogs.com/jialiangliang/p/6079123.html
Copyright © 2011-2022 走看看