define定义常量和宏
define定义常量
例:
#define MAX 1000 //defeine定义的MAX为常量
int main()
{
printf("%d",MAX);
return 0;
}
define定义宏
#include <cstdio>
#define ADD(X,Y) X+Y //该宏仅完成替换
int main()
{
printf("%d\n",ADD(2,3)); //运行结果为5
printf("%d\n",4*ADD(2,3)); //运行结果为11,而不是4*5
//4*2+3=11
return 0;
}
#define ADD(X,Y) ((X)+(Y)) //(X)表示x可能为一个表达式,此种写法不会出现上述问题
int main()
{
printf("%d\n",ADD(2,3)); //运行结果为5
printf("%d\n",4*ADD(2,3)); //运行结果为20
//4*(2+3)=20
return 0;
}
指针
内存
内存的使用
- 内存这种空间的使用与现实生活中空间的使用非常相似。
- 为了有效使用都编了一个精确的地址(指针)。
- 内存被划分成一个一个格子,再给每个格子编号。
内存的编号规则
32位:32根地址线——物理线,可以通电(1/0),32位二进制的所有可能性(1/0组成的二进制序列)共有232个可能性,即232个编号,即232个地址。
64位:264个地址。
一个内存单元的空间
一个内存单元大小为一个字节(1 Byte = 8 bit)。
变量地址
调试 -> 打开内存窗口/监视窗口 -> 输入"&a"取的变量a的第一个字节的地址。
int main()
{
int a = 10;
printf("%p\n",&a); //运行结果为0x7ffcc17a8c2c,为十六进制
int * pa = &a; //*说明pa是指针变量,int说明pa指向的对象是int型
*pa = 20; //*:解引用操作,*pa即通过pa中储存的地址找到变量a
return 0;
}
指针变量的大小
指针用于存放地址,所以指针变量的大小取决于存储地址需要的空间大小。
32位: 32bit - 4byte
64位: 64bit - 8byte
结构体 struct (& * . ->)
结构体可以让C语言创建新的类型
struct stu
{
char name[20];
int age;
double score;
};
struct book
{
char name[20];
float price;
char id[30];
};
int main()
{
struct stu s = {"张三",20, 85.5}; //结构体的创建和初始化
printf("1: %s %d %lf\n", s.name, s.age, s.score); //结构体.成员变量,输出为张三 20 85.500000
struct stu * ps = &s;
printf("2: %s %d %lf\n", (*ps).name, (*ps).age, (*ps).score); //通过指针打印
printf("3: %s %d %lf\n", ps->name, ps->age, ps->score); //通过箭头->符号找到地址中的对象打印
//三次打印结果均相同
return 0;
}