C语言写题笔记

1.float的默认精度为小数点后6位。
2.

char  str[] = “Hello” ;  sizeof(str)=6;                              
char   *p = str ;    sizeof(str)=4;
void * p = malloc( 100 );    sizeof(p)=4;
  1. 结构体与union的大小计算。
  • 结构体采用字节对齐方式。即结构体成员中占内存最多的数据类型所占的字节数为标准,所有的成员在分配内存时都要与这个长度对齐。
  • union采用最大的元素的长度。
typedef union {
        long i;
        int k[5];
        char c;


}DATE;
sizeof(DATE);//24

long 占8个字节,int k[5]占 20个字节,char c 占1个字节。union大小为20。

struct STUDENT
{
    char a;
    int b;
}data;
sizeof(data)//8

按下图进行字节对齐:
在这里插入图片描述

typedef union {
        long i;
        int k[5];
        char c;


}DATE;//size=24
struct name1
{
        int a;
        DATE b;
        double c;

}name1;

sizeof(name1);//40

以结构体中占内存最多的double 8作为标准,DATA 为24占三行,double int 各占一行,所以为5*8=40。

  1. 指针变量定义时,需要初始化。

  2. volatile关键字的作用:用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
    使用场景:
    1). 并行设备的硬件寄存器(如:状态寄存器)
    2). 一个中断服务子程序中会访问到的非自动变量
    3). 多线程应用中被几个任务共享的变量

  3. 头文件中 ifndef/define/endif 的作用:防止该头文件被重复引用。

  4. #include <filename.h> 和#include “filename.h” 有什么区别?
    对于#include <filename.h> ,编译器从标准库路径开始搜索filename.h ;
    对于#include “filename.h” ,编译器从用户的工作路径开始搜索filename.h 。

  5. const 关键字(重要)

  • const 修饰常量:定义时被初始化,不可以被修改。
  • const 修饰形参:形参在函数里,不可以修改。
  • const 修饰类成员函数:函数对成员变量只能进行只读操作。
  1. static 关键字 (重要)
  • static 修饰局部变量: 设置变量的存储域,存储在静态数据区,函数执行完成后,不会被释放,保留在内存中。
  • static 修饰全局变量:限制变量的作用域,只在本文件内部有效。
  • static 修饰函数:影响函数的连接方式,使得函数在本文件内部有效,不用担心与其他文件中的同名函数相冲突。
    static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
  1. 如何引用一个已经定义过的全局变量?
  • 引用头文件方式。
  • 使用extern关键字。
  1. 宏定义写swap(x,y)函数:
#define SWAP(x, y) 
(x)=(x)+(y);
(y)=(x)(y);
(x)=(x)(y)
  1. 宏定义写MAX(x,y)函数:
#define MAX(a,b)  (a>b)?a:b
  1. 带参宏和带参函数的区别:
类别带参宏带参函数
处理时间编译时运行时
参数类型需定义
程序长度变长不变
占用存储空间
运行时间不占运行时间调用和返回时占
  1. A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?

static修饰全局变量,只在本文件内有效。表明这个变量仅在本模块中有意义,不会影响其他模块。他们都放在静态数据区,但是编译器对他们的命名是不同的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值