从0基础入门C语言(四)

初识C语言(四)

本章目录

  • 什么是C语言
  • 第一个C语言程序
  • 数据类型
  • 变量、常量
  • 字符串+转义字符+注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • define 定义常量和宏
  • 指针
  • 结构体

十二、#define 定义常量和宏

// #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);

猜你喜欢

转载自blog.csdn.net/weixin_44675308/article/details/119039430