C的秘密(四)

C的秘密(四)

      • 1.__ attribute __ 机制
      • 2.字符串的两种方式
      • 3.scanf缓冲区匹配
      • 4.变量初始值

1.__ attribute __ 机制

​ 该机制可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。以函数属性为例如下(优先执行constructor 然后再执行 main函数 最后执行destructor):

__attribute__((constructor)) void first_out()
{
     
    printf("first out\n");
}
__attribute__((destructor))  void last_out()
{
     
    printf("last out\n");
}
int main()
{
     
    printf("main\n");
    return 0;
}
/*输出的结果为:
first out
main
last out
*/

2.字符串的两种方式

​ C语言有两种表示字符串的方法:

  • 字符数组【可读取和修改】
  • 字符串常量【只读取不能修改】

这两个根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区栈区,字符串常量存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。

3.scanf缓冲区匹配

​ scanf() 匹配到对应数据后,会将该数据从缓冲区中删除,而没有匹配到的数据仍然会留在缓冲区中。

int a, b=200;
float c;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
printf("a=%d, b=%d, c=%f\n", a, b, c);
/*
键入: 
100↙
20.3↙
输出:
a=100,b=200,c=20.3
*/

4.变量初始值

  • 全局变量:默认初始值始终是 0,因为全局变量存储在内存分区中的全局数据区,这个区域中的数据在程序载入内存后会被初始化为 0;
  • 局部变量:c语言没有规定局部变量的默认初始值,所以不同的编译器不一样,需注意局部变量必要添加初始化赋值

C的秘密(四)_第1张图片

你可能感兴趣的:(设计思考)