一 #define定义宏
#define可以定义宏 格式如下
#define ADD(x,y) ((x)+(y))
printf(“%d”, ADD (2,3));
这里就是一个简单的用define定义的加法宏
这里有两个需要注意的点
1 define定义宏的参数不需要规定格式
2 注意后面表达式 每个参数都需要用括号括起来 并且最后需要用大括号括起来
二 初识指针
指针是什么呢?
要解释这个问题 我们先来看以下代码
int a = 10; int* p = &a;
从系统内存的角度解释下上面两段代码
第一段代码 创建一个整型变量a 并且像内存申请四个地址 将a的值赋值为10
关于内存的知识 我们都知道计算机的内存很大的
为了很好的利用这些内存 我们将这些它们分割成很多个小的内存
并且规定 每个小的内存占用一个字节即8个bit位的空间
并且它们都有一个属于自己的编号
关于编号 在三十二位系统中 一个地址有32个位 即32个01组成 所以它能够表示2的32次方的地址
每一个地址有占用4个字节(32个位)的大小
第二段代码 我们创建一个指针变量p来存放a的地址
又因为我们上面的解释 我们很容易能推断出
指针就是地址
地址就是内存的编号
在三十二位系统上 地址占用4个字节的大小
在六十四位系统上 地址占用8个字节的大小
再回到第二段代码
int* p = &a;
其中int* 表示它是一个整形指针
int 表示指针指向的地址是一个整型
*表示后面的p是一个指针
p是一个指针变量
那么如果我需要创建一个指针 它指向一个字符类型的变量 我应该怎么创建呢?
char a = 'a'; char* pa = &a;
小tip: 我们口头说的指针其实一般指的是指针变量
知道指针只有又有什么用呢?
要回答这个问题我们首先要知道解引用操作符
char a = 'a'; char* pa = &a; *pa = 'c'; printf("%c",a);
我们上面解释了 指针其实就是地址 而地址其实就是内存单元的编号
也就是说我们可以通过指针找到这个内存单元在哪里
找到这个一个内存单元之后我们可以使用‘*;操作符来修改这个内存单元里面存放的内容
大家可以试着运行上卖弄的四行代码 看看运行出来的结果是什么
三 初识结构体
为什么要有结构体
因为单单凭借int float这些类型的变量无法解释一个复杂的对象
结构体是怎么创建的呢
struct stu { char name[20]; short age; int id; };
struct stu s1 = { "zhangsan",18,2115110165 };
我们可以看到 结构体的创建方式如上
可以比如成造房子
我们首先创造一个图纸 规定了这个房子应该有名字 应该有房间 应该有床
然后到下面再根据个人的需求创造一个自己的房子
结构体怎么调用呢
结构体调用有两种方式
void print(struct stu* ps) { printf("%d\n", ps->id); }
printf("%d", s1.age);
printf("%d\n", (*ps).id);