C的秘密(四)

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

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语言没有规定局部变量的默认初始值,所以不同的编译器不一样,需注意局部变量必要添加初始化赋值

WEIXNI

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值