#define 定义常量和宏
define是一个预处理指令。
在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C或C++语言中,“宏”分为有参数和无参数两种。
//1.define定义符号
#define MAX 1000
int main()
{
printf("%d",MAX);//1000
return 0;
}
//2.define定义宏
#define ADD(X,Y) X+Y
int main()
{
printf("%d\n",ADD(2,3));//5
printf("%d\n",4*ADD(2,3));//11 这里有人想为什么不是20
//实际上它是4*2+3=11
return 0;
}
//程序运行结果如下图
#define ADD(X,Y) (X+Y)//x,y括起来才能达到想要结果
int main()
{
printf("%d\n",4*ADD(2,3));//20 只是将2,3的值传给X与Y 4*(2+3)=20
return 0;
}
程序运行看下图:
指针
指针:是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。
int main()
{
int a = 10;//a在内存中要分配空间--4个字节
printf("%p\n", &a);//%p用来打印地址,a的地址取的是a的4个字节的首字节地址
int* pa = &a;//pa用来存放地址,在C语言中pa叫做指针变量
//*说明pa是真正变量
//int 说明pa执行的对象是int类型的
char ch = 'w';
char* pc = &ch;
return 0;
}
这里打印了a的地址
int main()
{
int a=10;
int* pa=&a;
*pa=20;//解引用操作 *pa就是通过pa里面的地址找到a
printf("%d\n",a);//20
return 0;
}
指针变量的大小
int main()
{
printf("%d\n",sizeof(char*))
printf("%d\n",sizeof(int*))
printf("%d\n",sizeof(long*))
printf("%d\n",sizeof(long long*))
printf("%d\n",sizeof(short*))
printf("%d\n",sizeof(double*))
//指针的大小是相同的都是4字节
// 指针的大小是相同的
//指针是用来存放地址的
//指针需要多大空间,取决于地址的储存需要多大空间
//32位-4字节
//64位-8字节
return 0;
}
为什么呢?
首先,我们要明白,指针就是地址,地址就是指针。 而地址是内存单元的编号。所以,一个指针占几个字节,等于是一个地址的内存单元编号有多长。
内存地址就像门牌号,用几位表示需要看门牌数量。
门牌号从0号开始编排,到2^32-1号结束。
一共就有2^32个门牌号。分别为二进制的
000000000000000000000000000号
000000000000000000000000001号
000000000000000000000000010号
最后
111111111111111111111111110号
111111111111111111111111111号
每个门牌的号码是32位(二进制),一个字节为8位,32位就是4字节。64位就是8字节
结构体
结构体是c语言中特别重要的知识点,结构体使得c语言有能力描述复杂类型。结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以做成你想要的数据类型。以方便日后的使用。在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言无法操作数据库,所以在项目中通过对结构体内部变量的操作将大量的数据存储在内存中,以完成对数据的存储和操作。在实际问题中有时候我们需要几种数据类型一起来修饰某个变量。
比如描述学生-名字,年龄,分数
//结构体可以让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);//结构体变量.成员变量
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;
}
如下图,三种打印成员变量方式打印输出如下