当前位置 博文首页 > Mr.Rui的博客:从0基础入门C语言(四)
// #define 定义的标识符常量
#define MAX 100
int main()
{
int a = MAX; // 这里的MAX就是100,只有未来这个位置都是MAX,通通都是100
return 0;
}
// #define 可以定义宏 - 带参数
// 函数定义方式
int Max(int x, int y)
{
if (x,y)
return x;
else
return y;
}
// 宏定义方式
#define MAX(X,Y) (X>Y?X:Y)
int main()
{
int a = 10;
int b = 20;
// 函数的方式
int max = Max(a,b);
printf("max = %d\n",max);
// 宏的方式
max = MAX(a,b);
// 在这块MAX的操作方式是: max = (a>b?a:b);
printf("max = %d\n",max);
return 0;
}
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
& 取地址符
代码:
int main()
{
int a = 10;
printf("%p\n,a");
return 0;
}
结果:
00DDFB00
取地址
int main()
{
int a = 10;
int* p = &a;
printf("%p\n", &a);
printf("%p\n", p);
return 0;
}
结果: 一致的
00DDFB00
00DDFB00
int main()
{
int a = 10; // 申请了4个字节的空间
int* p = &a; // p 是一个变量 -- 指针变量
//printf("%p\n", &a);
//printf("%p\n", p);
*p = 20; // --解引用操作符/间接访问操作符
printf("%d\n", a);
return 0;
}
结果是:20
*p 解引用操作符
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(double*));
/*double d = 3.14;
double* pd = &d;
printf("%d\n", sizeof(pd));*/
/**pd = 5.5;
printf("%lf\n", d);
printf("%lf\n", *pd);*/
return 0;
}
指针大小在32位平台是4个字节,64位平台是八个字节
x64平台
x86平台,也就是32位
我们学到现在接触了很多类型,比如:int。char,double…等;那么如何表示一个人呢?
人 = 3.14 或者 人 = ‘w’ 吗?
人或者书,这些东西我们要表达的时候,人 或者 书 这些都是 – 复杂对象;
比如描述人要有: 姓名+身高+年龄+身份证号码+…等等一些相关的信息才能够描述清楚。
比如描述书要有:书名+作者+出版社+定价+书号…等等
它们都是一些----复杂对象;
对于复杂对象我们就用 — 结构体 — 我们自己创造出来了的一种类型。
代码实例: 创建一个结构体类型
// 创建一个结构体类型
struct Book
{
char name[20]; // C语言程序设计
short prices; // 55
};
然后再创建我们的主函数main(),利用结构体类型创建一个类型的结构体变量
int main()
{
// 利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计",55};
printf("书名:%s\n", b1.name);
printf("价格:%d\元n", b1.prices);
return 0;
}
运行结果:
书名:C语言程序设计
价格:55元
修改结构体变量的值
int main()
{
// 利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计",55};
printf("书名:%s\n", b1.name);
printf("价格:%d元\n", b1.prices);
b1.prices = 15;
printf("修改后的价格:%d\n", b1.prices);
return 0;
}
运行结果:
书名:C语言程序设计
价格:55元
修改后的价格:15
修改书名,需要用到strcpy-字符串拷贝函数
#include <string.h>
// 创建一个结构体类型
struct Book
{
char name[20]; // C语言程序设计
short prices; // 55
};
int main()
{
// 利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计",55};
struct Book *pb = &b1; //书类型的指针
// 利用pb打印出我的书名和价格
// 打印简化的形式 ---- 使用->箭头就是指向的意思,获取书类型的指针pb,直接指向 name 和 prices
/*printf("书名:%s\n", b1.name);
printf("价格:%d元\n", b1.prices);
b1.prices = 15;
printf("修改后的价格:%d\n", b1.prices);
return 0;*/
strcpy(b1.name,"C++"); // strcopy-string copy -字符串拷贝--库函数,库函数需用用到 头文件
printf("书名:%s\n", b1.name);
}
因为strcpy是一个库函数,所以我们需要引入头文件 #include <string.h>
运行结果:
书名:C++
结构体里面的指针:struct Book *pb = &b1; //书类型的指针
使用指针获取书名和价格
// 创建一个结构体类型
struct Book
{
char name[20]; // C语言程序设计
short prices; // 55
};
int main()
{
// 利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计",55};
struct Book *pb = &b1; //书类型的指针
// 利用pb打印出我的书名和价格
printf("书名:%s\n", (*pb).name);
printf("价格:%d元\n", (*pb).prices);
/*printf("书名:%s\n", b1.name);
printf("价格:%d元\n", b1.prices);
b1.prices = 15;
printf("修改后的价格:%d\n", b1.prices);
return 0;*/
}
运行结果:
书名:C语言程序设计
价格:55元
简化的书写方式:
打印简化的形式 ---- 使用->箭头就是指向的意思,获取书类型的指针pb,直接指向 name 和 prices
// 创建一个结构体类型
struct Book
{
char name[20]; // C语言程序设计
short prices; // 55
};
int main()
{
// 利用结构体类型创建一个该类型的结构体变量
struct Book b1 = {"C语言程序设计",55};
struct Book *pb = &b1; //书类型的指针
// 利用pb打印出我的书名和价格
// 打印简化的形式 ---- 使用->箭头就是指向的意思,获取书类型的指针pb,直接指向 name 和 prices
printf("书名:%s\n", pb->name);
printf("书名:%d元\n", pb->prices);
/*printf("书名:%s\n", (*pb).name);
printf("价格:%d元\n", (*pb).prices);*/
/*printf("书名:%s\n", b1.name);
printf("价格:%d元\n", b1.prices);
b1.prices = 15;
printf("修改后的价格:%d\n", b1.prices);
return 0;*/
}
运行结果:
书名:C语言程序设计
书名:55元
点 和 箭头的区别 . / ->
// -> 结构体指针->成员
printf("书名:%s\n", pb->name);
printf("书名:%d元\n", pb->prices);
// . 结构体变量.成员
printf("书名:%s\n", (*pb).name);
printf("价格:%d元\n", (*pb).prices);
cs