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语言中的__attribute__机制,探讨了字符数组和字符串常量的区别,以及scanf缓冲区的工作原理,并关注了变量的默认初始值。深入理解这些基础知识有助于提升C语言编程能力。
577

被折叠的 条评论
为什么被折叠?



