个人笔记(二)
getchar()从缓冲区获取字符,如果缓冲区为空,则阻塞直至用户输入字符。
2.
char、short自动转换int、float自动转换double
3.
#define宏定义只是做简单的替换,并不占用内存
//这里把PI替换为3.14
#define PI 3.14
宏定义只会做简单的替换,而不会计算优先级问题,则需对单元加上括号
//A,B可以是表达式,如果是表达式,且表达式当中的符号优先级低于 > 号,会导致出来的结果不是我们想要的
#define MAX(A,B) (A > B ? A : B)
//加上括号就行
#define MAX(A,B) ((A) > (B) ? (A) : (B))
#开头 以if开头 必须以endif结尾
#ifdef if = defined如果已经定义
#ifndef = if not defined 如果尚未定义
#ifndef TEST // 等于if define
//#undef TEST 等于 nudefine
void print_message()
{
printf("这里是定义的\n");
}
#else
void print_message()
{
printf("这里是未定义的\n");
}
#endif
一般来说,对于代码当中尚未开发完成的代码,而又可能会导致一些不可预见的问题,但是又不想让程序无法执行 可以加上这样一个预处理指令,代表代码仍需处理
#warning 这里会出现警告
#error 这里会出现错误
//非致命性警告
#pragma warning("这是什么?")
如果使用gcc 文件名 来编译,不会出现内容,需要用 gcc -Wall 文件名来编译(-W 代表warning all代表所有)
8.
// 显示一段信息
#pragma message("这是一段信息")
直接用gcc 文件名 来编译
<>直接从系统路径当中查找对应的头文件
“”先从当前源文件路径查找,如果查找不到,再到系统源文件路径查找
#include <stdio.h>
#include "stdio.h"
在数组作为函数的参数时,其被转换为指针
结构体存在字节对齐,如果下一个成员无法在有限空间存放,则需要额外的空间存放结构体内部最大的单成员类型的整数倍
#include <stdio.h>
/*
结构体所占的内存大小
(1)本身的成员变量类型
(2) 结构体存在字节对齐 如果下一个成员无法在有限空间存放,则需要额外的空间存放
结构体内部最大的单成员类型的整数倍
怎么改变优化字节对齐?
(1)按照有限空间合理排布成员顺序
(2)更改字节对齐的方式
位域的概念 还是优化结构体占内存的方式
(1)针对于整数类型的成员变量,可以通过位域指定其所占内存位的多少
(2)无法超过其类型本身的位数 如char 不能超过 8位
*/
// 4 1(3) 8 = 16
struct Person
{
int number;
char sex;
double money;
};
int main(int argc, char const *argv[])
{
// 结构体的内存
printf("%lu\n", sizeof(struct Person));
return 0;
}
运行结果为:16
struct Person
{
//顺序调换一下
// 4(4) 8 1(7) = 24
int number;
double money;
char sex;
};
运行结果为:24
// 字节对齐按照1字节对齐, 无额外空间的方式 ,直接等于所有成员的字节相加
// ‘1’, ‘2’,‘4’, ‘8’, or ‘16’ 字节对齐方式可选值 其实就是基础类型的字节大小
#pragma pack(1)