register关键字请求编译器尽可能地将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。
    使用register修饰符有几点限制:

    1. register变量必须是能被CPU所接受的类型。

    这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。

    1. 因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址。

      1. void main()
      2. {
      3. register int a = 0;
      4. int *p = &a; //错误
      5. }
    2. 只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量、结构体、共用体内部变量)不行。特别地,静态局部变量不能定义为寄存器变量。 ```c struct STRUCT_NAME { register int a; //错误 };

    union UNION_NAME { register int b; //错误 };

    register int c; //错误

    void main() { register static int d = 0; //错误 } ```

    1. 由于寄存器的数量有限,不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,任何多余的register修饰符都将被编译程序所忽略。