【C语言跬步积累】——#define定义常量和宏、指针(初级)

515 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一.#define定义常量和宏

1.定义常量

#include<stdio.h>
#define max 100 //固定语法,中间不需要加等号
int main()
{
int a = max;
printf("%d\n",a);
return 0;
}

输出结果:

100

分析: #define将max大小定义为100,在之后使用max时,计算机便会主动将max替换成100

2. 定义宏

(1)例1(函数形式,与宏形成对比)

#include<stdio.h>
int Max(int x, int y)
{
	if (x > y)
		return x;
	else
		return y;
}
int main()
{
	int a = 520;
	int b = 521;
	int max = Max(a, b);
	printf("%d\n", max);
	return 0;
}

输出结果:

521

分析:

仍然是通过构造新函数再使用if,else语句来实现求最大值,这里就不对代码具体讲解了,如果有才学的可以不妨先看一下前面的文章,最前面几篇对代码的讲解还是挺到位的,如果还有问题可以私信问我

(2)例2(使用#define来定义宏)

#include<stdio.h>
#define Max(x, y) (x>y?x:y)
int main()
{
	int a = 520;
	int b = 521;
	int max = Max(a,b);
	printf("%d\n", max);
	return 0;
}

输出结果:

521

分析:

#define Max(x,y) (x>y?x:y)该段代码便是#define定义宏,使用了三目操作符,之前我写过相关的文章(t.csdn.cn/GQ6aN) 有兴趣可以去看看。 int max=Max(a,b);这部分将来在编译器会被替换成int max=(a>b?a:b);(如果a>b,会将a的值赋给max,如果a<b,则会将b的值赋给max)

在这里给大家以最大值举的例子,大家有兴趣可以自己尝试着以加法的形式敲一敲代码,自己感受一下

二.指针(初级)

1.内存

在讲解指针之前,先介绍一下内存

内存是电脑上特别重要的储存器,计算机中所有的程序的运行都是在内存中进行的。

所以为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。

为了能狗有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

以下是图文解析:

image.png

例如:int a=10;是四个字节大小,需要向内存申请四个字节的空间。图片中绿色部分便是申请的空间大小

image.png

2.如何查看地址

实例:

#include<stdio.h>
int main()
{
	int a = 10;
	printf("%p\n", &a);
	return 0;
}

输出结果:

image.png

输出的内容就是a的地址(输出的内容是十六进制)

分析:&是取地址操作符(取出地址),%p只用来打印地址的,对于&的介绍可以看我之前的博客(t.csdn.cn/GQ6aN)

3.指针变量

实例1:

#include<stdio.h>
int main()
{
	int a = 10;
	int* p = &a;
	printf("%p\n", &a);
	printf("%p\n", p);
	return 0;
}

输出结果:

image.png

由此可见,两次输出的结果是一样的

分析:int*是指针变量类型,p是指针变量

实例2:

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

输出结果:

image.png

这段代码意在注意不同的类型的写法,一般举例都是以int为例,但还要注意有其他类型,不要墨守成规,要会举一反三

注意:在32位的平台上一个指针变量的大小是4个字节,64四位的平台则是8个字节

例析:

image.png

image.png

很明显,我当前是64位的平台

那么如何调成32位的平台呢?

image.png

image.png

image.png

image.png

image.png

image.png

设置完之后看看代码跑起来是什么样子的:

image.png

image.png

结果就变成4了,也就说明现在是32位的平台了 

为什么是4个字节或者8个字节呢?

因为指针变量存储的是地址,地址分为32个二进制位和64个二进制位,因此指针大小能够存储32个二进制位或者64个二进制位,换算之后也就是4个字节或者8个字节

4.32位和64位的区别(题外话)

32位和64位意味着处理器一次性处理的最大位数不同,64位的处理器处理的更快 64位的处理器支持安装32位和64位系统,而32位处理器只支持安装32位系统 32位系统的最大寻址空间是4GB左右,而64位系统的最大寻址空间大于1亿GB,实际运行中32位系统最多识别3.5GB内存,64位系统最多识别128GB内存

最后:

本篇讲解的指针只是带大家初步了解,为之后的指针学习打下基础,之后会有指针的详细讲解