初识C语言系列-5-完结篇-#define,指针,结构体

目录

1、前言

2、#define定义常量和宏

#define定义常量

#define定义的宏

3、指针

内存

指针变量的大小 

 4、结构体


1、前言 

终于到了初识C语言的完结篇了,这里再次祝大家五一节日快乐哈!!这个系列结束后我们将正式开始C语言的学习——初阶C语言。博主尽量及时更新,让大家可以学到更多的东西,也感谢大家的多多支持哈!!!前几天博主没有更新,有些小伙伴来催更了,感谢大家伙对我写的博客的喜爱和支持,我会更加努力的!!!有什么问题也劳烦大家可以指出,不理解的地方也要在评论区多多留言哦!最后希望大家多多支持和关注哦!那么我们开始今天的学习吧!

 

 (博主的状态哈哈哈哈

2、#define定义常量和宏

#define定义常量

C语言中,可以用 #define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。

预编译又叫预处理。预编译不是编译,而是编译前的处理,编译器正式开始编译程序之前,会执行一段预处理程序(又称预处理器)专门对程序执行预处理操作。

#define 和 #include 一样,也是以“#”开头的。凡是以“#”开头的均为预处理指令,#define也不例外。

#define定义常量的语法:

#define  标识符  常量   //注意, 最后没有分号

变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值。 

 如下面这个程序:

#include<stdio.h>

#define MAX 100//#define定义标识符常量
int main()
{


	printf("%d\n", MAX);

	
	return 0;
}

当我们给MAX赋值的时候就会报错了!!!

 

 这就是说明了宏常量不能够修改

 我们可以看到,#define定义的常量我们可以直接输出,其实,它也可以运算,我们可以把它理解成一个不变的数(当然,我们也可以手动改变它的数值),它可以参与数字的运算啊,放到数组充当数组长度啊,等等等等

#include<stdio.h>

#define MAX 100//#define定义标识符常量
int main()
{


	printf("%d\n", MAX);

	int a = 5 + MAX;
	int arr[MAX] = { 0 };
	printf("%d\n", a);
	
	return 0;
}

 我们可以看到a的值变成了105

 我们通过调试—>窗口—>监视来看看数组arr的下标情况:

我们可以清晰的看到,该数组的下标是从0~99,并且都被初始化为了0。 

接着看呗哈哈哈哈

#define定义的宏

 #define定义的宏和函数有些相似,但又不一样

比如下面这个程序:

#include<stdio.h>
#define ADD(x,y) ((x)+(y))
int main()
{

	int sum = ADD(2, 3);
	printf("%d\n", sum);
	sum = 5 + ADD(2, 3);
	printf("%d\n", sum);

	return 0;
}

它所起到的作用和函数类似,但其定义和函数还是区别比较大的!!! 

 大家可以多去练练这个语法,说不定会有意外之喜呢!!!

 加油,程序人哈哈哈。

3、指针

内存

指针是非常重要的一个知识点,希望大家能够好好的掌握!好好掌握哦!好好掌握!重要的事情说三遍!!!别不识好歹!!!

 我们要想了解指针,首先要了解内存地址

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

补充一点小知识,感兴趣的同学可以了解一下哈!~ 

 

 为了方便理解地址,我们再来举一个小小的例子:

 

假设这是一家公司的办公楼,一共七层,每层有六个房间,那么外卖小哥想把外卖送到订外卖的人的手里便需要从第一层第一间房间可以找,直到找到他。这样就显得比较麻烦了。那要是外卖给每一层的房间标上房间号,订餐时标明房间号,是不是去就找到啦!!!

就像这样,603的顾客点餐了,外卖小哥可以直接送到603而不需要去一个一个找。这些个房间号就相当于地址,房间的格子就叫相当于存放的数据。怎么样,是不是容易理解了?

 

 变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。取出变量地址如下:

#include <stdio.h>
int main()
{
	int num = 10;
	&num;//取出num的地址
	//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
	printf("%p\n", &num);//打印地址,%p是以地址的形式打印
	return 0;
}

我们可以看到10的地址就打印出来了。

给大家看一下详细的图示

 这也就是说,在一个内存中,整型数字在内存中要4个字节来存储其地址。但是,对于地址如何去存储呢?这就用到了指针变量!

 (好困,现在是凌晨1点)

如何定义指针变量?看下面咯

int num = 10;
int *p;//p为一个整形指针变量
p = &num;

这就是指针变量的定义方式,其中p是整型指针变量,它存放的是num的地址,而*p则表示的是num这个数值*表示解引用,表示对地址中的值进行返回。下面列举一个指针的实例:

#include <stdio.h>
int main()
{
	int num = 10;
	int* p = &num;
	*p = 20;
	return 0;
}

 以整型指针为例可以推广到其他类型:

#include <stdio.h>
int main()
{
	char ch = 'w';
	char* pc = &ch;
	*pc = 'q';
	printf("%c\n", ch);
	return 0;
}

指针变量的大小  

#include <stdio.h>
//指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}

大小在32位系统下是4个字节,在64位系统下是8个字节,这里就演示了一下32位操作系统的,感兴趣的可以下去试一下64位的哦!

 4、结构体

最后我们来说一下结构体!!!

也是很重要的哦

好好看

 结构体是把单一类型组合到一起的做法。比如说对于一个人来说,他有姓名,年龄,性别,电话等等信息,我们要想把它们整合到一起就需要借助结构体的做法

结构体的定义我们需要用到一个关键字struct ,就像下面这个例子

struct People
{
	char name[20];//名字
	int age; //年龄
	char sex[5]; //性别
	char id[15]; //电话
};

我们在对结构体定义完后要进行初始化,那么怎么进行初始化呢?

 请看这个程序:

#include<stdio.h>
int main()
{


	struct People
	{
		char name[20];//名字
		int age; //年龄
		char sex[5]; //性别
		char tele[15]; //电话
	};


	//打印结构体信息
	struct People p = { "张三", 20, "男", "15566688888" };
	//.为结构成员访问操作符
	printf("name = %s age = %d sex = %s tele = %s\n", p.name, p.age, p.sex, p.tele);
	//->操作符
	struct People* ps = &p;
	printf("name = %s age = %d sex = %s tele = %s\n", ps->name, ps->age, ps->sex, ps>tele);


	return 0;
}

 运行结果:

 详细的解释注释里面有,如果感觉困惑可以评论区留言哦!看到了会第一时间回复呢!

//.为结构成员访问操作符
	printf("name = %s age = %d sex = %s tele = %s\n", p.name, p.age, p.sex, p.tele);
	//->操作符
	struct People* ps = &p;
	printf("name = %s age = %d sex = %s tele = %s\n", ps->name, ps->age, ps->sex, ps>tele);

 在进行成员访问的时候切记不能调换顺序,一定要严格按照结构体定义里面的顺序进行访问,要不然编译器就会报错了!!!

好哒,今天的内容就说到这里了,希望大家多多支持,多多鼓励,多多关注噢!

下一次就是初阶C语言系列了,让我们再见吧!!!

你们的支持是我最大的动力,让我们一起学习,一起进步吧!!

别忘了留下你们的花花和点赞噢~

谢谢支持!!

猜你喜欢

转载自blog.csdn.net/m0_67995737/article/details/124508260