c语言学习(days12)
·
一、预处理命令(Preprocessor Directives)
1. 宏定义(Macro Definition)
不带参数的宏定义
#define 宏名 替换内容
#define P 100
作用:编译前进行字符串替换
约定:宏名通常用大写字母表示
可嵌套使用多个宏
带参数的宏定义
#define 宏名(参数) 替换内容
#define ADD(a,b) ((a)*(b))
无需指定参数类型(参数只是字符串替换)
强烈建议在宏定义中加括号,防止优先级错误
2. 查看预处理结果
gcc -E -o main.i main.c
说明:只执行预处理阶段,不生成目标文件
输出文件 main.i 为预处理后的C文件
二、文件包含命令(Include)
#include "file.h" // 在当前目录查找
#include <file.h> // 在系统目录
本质上也是文本替换
三、条件编译(Conditional Compilation)
#ifdef 宏名
// 已定义宏,编译这部分
#else
// 未定义宏,编译这部分
#endif
#define DEBUG
#ifdef DEBUG
printf("调试信息\n");
#else
printf("正式版本\n");
#endif
四、指针基础
定义方式
int i;
int *p = &i;
*p = 10;
printf("%d\n",*p);
*p 是指向变量 i 的指针,表示“访问地址中存储的值”
*p 的数据类型就是“指针的基类型”(如 int)
内存占用
int 型指针
在64位系统中,指针变量占8个字节
在32位系统中,指针变量占4个字节
通过指针修改主调函数变量的值
使用函数传参时传递地址,实现在被调函数中改变主调函数的值(传址调用)
表达式理解
*&p == p 和 &*p == p 都成立
*p 类似一个跳转到内存中相应地址
访问指针指向的内存的过程:
1.根据指针变量的值确定内存地址;
2.从该地址向后偏移 sizeof(基类型) 字节;
3.将这段内存解释为一个 基类型 变量。
更多推荐



所有评论(0)