目录
一.#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定义宏,使用了三目操作符(不了解这个三目操作符的可以看这篇博客(http://t.csdn.cn/GQ6aN),里面有详细的解释,这里就不过多赘述了)
- int max=Max(a,b);这部分将来在编译器会被替换成int max=(a>b?a:b);(如果a>b,会将a的值赋给max,如果a<b,则会将b的值赋给max)
在这里给大家以最大值举的例子,大家有兴趣可以自己尝试着以加法的形式敲一敲代码,自己感受一下
二.指针(初级)
1.内存
在讲解指针之前,先介绍一下内存
内存是电脑上特别重要的储存器,计算机中所有的程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。
为了能狗有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
以下是图文解析:
例如:int a=10;是四个字节大小,需要向内存申请四个字节的空间。图片中绿色部分便是申请的空间大小
2.如何查看地址
实例:
#include<stdio.h>
int main()
{
int a = 10;
printf("%p\n", &a);
return 0;
}
输出结果:
输出的内容就是a的地址(输出的内容是十六进制)
分析:&是取地址操作符(取出地址),%p只用来打印地址的,对于&的介绍可以看我之前的博客(http://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;
}
输出结果:
由此可见,两次输出的结果是一样的
分析:int*是指针变量类型,p是指针变量
实例2:
#include<stdio.h>
int main()
{
char ch='w';
char* pc=&ch;
*pc='a';
printf("%c\n",ch);
return 0;
}
输出结果:
这段代码意在注意不同的类型的写法,一般举例都是以int为例,但还要注意有其他类型,不要墨守成规,要会举一反三
注意:在32位的平台上一个指针变量的大小是4个字节,64四位的平台则是8个字节
例析:
很明显,我当前是64位的平台
那么如何调成32位的平台呢?
设置完之后看看代码跑起来是什么样子的:
结果就变成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内存
最后:
本篇讲解的指针只是带大家初步了解,为之后的指针学习打下基础,之后会有指针的详细讲解