美文网首页
准备:回顾c

准备:回顾c

作者: ChenME | 来源:发表于2017-04-12 16:36 被阅读6次
  1. 宏定义
  2. 关键字 define
  3. 定义一个常量的方法(即宏定义)
// 常量的定义方法:(注意语句后面没有分号)
// #define 常量名 常量值
#define PI 3.1415926
  1. 带参数的宏定义
#define N(n) n*10
int b = N(10);//此处经过预编译之后的结果为 int b = 10*10;
  1. 宏函数的定义
//一般的写法
int add(int a, int b) {
    return a + b;
}
int main() {
    int a = 10;
    int b = 100;
    int result = add(a, b);
    return 0;
}
//
//使用宏函数的写法
#define ADD(a, b) (a+b)
int main() {
    int a = 10;
    int b = 100;
    int result = ADD(a, b);
    //
    int result2 = ADD(a, b) * ADD(a, b);
    // 此处预编译之后的结果为:
    // int result2 = (10 + 100) * (10 + 100);
    //
    // 假设宏函数写成 #define ADD(a, b) a+b
    // 则编译后的结果为:
    // int result2 = 10 + 100 * 10 + 100;//结果就错了,没有达到想要的结果
    return 0;
}
  • 使用宏函数的好处是,不需要为参数a和参数b提供返回值类型,同时也不需要为函数提供返回值类型;
  • 宏定义不论写在哪里,都是全部的,即如果把宏定义写在add函数中,在mian函数中依然可以使用(注意:这里要区分typedeftypedef是有作用域的)
  1. 结构体
  2. 关键字 struct
  3. 创建一个结构体
//创建一个结构体类型
struct Coor{
    int x;
    int y;
};
  1. 声明一个结构体变量
    1. 第一种方法
//声明一个结构体变量
struct Coor coor1;
2. 第二种
//创建一个结构体类型并声明一个全局的结构体变量
struct Coor{
    int x;
    int y;
}coor2;
3.第三种
//不指定结构体的名字
struct{
    int x;
    int y;
}coor2;
  1. 初始化一个结构体变量
//方法1:创建并初始化
struct Coor coor1 = {20, 30};
//
//方法2:
coor1.x = 20;
coor1.y = 30;
  1. 结构体数组
struct Coor coorArr[2] = {{10, 10}, {20, 20}};
  1. 结构体指针
struct Coor *c = &coor1; //创建一个结构体指针并赋值
int temp = (*c).x; //取出变量coor的x轴坐标
// 以上代码等同于
// int temp = c -> x; // -> 指向运算符
  1. 别名
  2. 关键字 typedef
  3. 用于给关键字起别名
typedef int tni; //注意这里有分号,以后就可以使用 tni 代替 int 
typedef int *p; //以后就可以使用 p 代表int类型的指针了,即 int *
  1. 用于给结构体起别名
typedef struct {
    int x;
    int y;
} Coor;
  1. 共用体(联合体)

  2. 关键字 union

  3. 作用:让几个不同类型的变量共享同一个内存地址;

  4. 变量的存储类别

  5. C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。

  • 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。
  • 动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。
  1. C语言中存储类别又分为四类:自动(auto,默认可省略)、静态(static)、寄存器的(register)和外部的(extern)
  2. 用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。如:
int fn(int a){
    auto int b,c;
    ... ...;
}
2. 用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。

注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)

void fn() {
    static int x = 0;   //定义静态局部变量
    x++;
    printf("x=%d\n", x);
}
int main() {
    for (int i = 0; i < 10; i++) {
        fn();
    }
    return 0;
}

输出结果为:


Paste_Image.png

如果去掉static关键字,则输出结果为:


Paste_Image.png
3. 为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。
4. 用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。
int main() {
   extern int x;
    cout<<x<<endl;
    return 0;
}
int x =100;
//输出结果为100;

相关文章

  • 准备:回顾c

    宏定义 关键字 define 定义一个常量的方法(即宏定义) 带参数的宏定义 宏函数的定义 使用宏函数的好处是,不...

  • C 回顾

    1.数据类型的用途 数据类型的本质:固定大小内存块的别名 b 和 &b 地址相等 b+1 (跳4字节) 和 &b+...

  • C 语言回顾

    当你写下面代码发生了什么 用预处理指令#define 声明一个常数,用表示1年中有多少秒(忽略闰年问题) 写一个标...

  • C++ 回顾

    C++对C的加强 0.面向过程–>函数+面向对象–>类和对象 1.namespace命名空间 2.实用性 增加 -...

  • C++ 回顾

    typedef 使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的...

  • C语言回顾

    基础知识 控制流 基础知识补充 其他主题

  • C与C++回顾

    c++:更好的c,c的超集 c++基本知识cin,cout命令空间引用:别名 T&x=p 高级函数的特性 内联函数...

  • C_Cpp-C语言回顾

    一.数据类型及长度 二.输入输出 三.指针 四.内存分配 简书: http://www.jianshu.com/p...

  • 知识回顾 - C/C++区别

    前言 本文主要参考了C++标准委员会出品的 Mix-c-and-cpp 和 Learning C++ if yo...

  • C 文件操作回顾

    可以在程序运行时分配更多的内存,主要工具是malloc(),它接受一个参数,所需字节数,然后malloc()找到可...

网友评论

      本文标题:准备:回顾c

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