C语言学习————常量和宏、初识指针

#define 定义常量和宏

define 是一个预处理指令

用途:1.define 定义符号

#define MAX 1000
int main()
{
	printf("%d\n", MAX);
	return 0;
}

2.define 定义宏

#define ADD(X,Y) ((X)+(Y))
int main()
{
	printf("%d\n", ADD(2, 3));
	return 0;
}

指针

内存

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

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

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

这样,就引出来两个问题

1.内存是怎样进行编号的?

2.一个这样的内存单元是多大空间?

1.计算机分为32位和64位

32位:32根地址线——物理意义上的线,可以通电——正电是1负电是0

电信号转换为数字信号就可以得到0和1组成的二进制序列

00000000000000000000000000000000

00000000000000000000000000000001

......

011111111111111111111111111111111111

10000000000000000000000000000000

......

111111111111111111111111111111111111

会产生2的32次方这样的二进制序列,有2的32次方个内存单元

一个这样的二进制序列就是一个地址,即编号

2.假设一个内存单元是1bit,有2的32次方个内存单元,所以就有2的32次方个bit

用计算机算出,2的32次方对应4,294,967,296个bit

4,294,967,296 bit /8

=536,870,912 byte /1024

=524,288 kb /1024

=512 mb /1024

=0.5gb

由于这样管理过于细致以及浪费,最终决定以一个byte作为一个内存单元

最终,一个内存单元是一个字节,然后分配地址.

int main()
{
	int a = 10;//a在内存中要分配空间-4个字节
	printf("%p\n", &a);//%p 专门用来打印地址
	return 0;
}

在vs输入如上代码,并F10调试,在到达printf行后,点击调试-窗口-内存-内存1

并在出来的窗口地址栏里输入&a,就可以看到a的地址

同样,在调试-窗口-监视-监视1中

在搜索栏里搜索&a,同样也能看到a的地址

int main()
{
	int a = 10;//a在内存中要分配空间-4个字节
	printf("%p\n", &a);//%p 专门用来打印地址
	int* pa = &a;//pa是用来存放地址的,在C语言中被称为指针变量
	//* 说明,pa是指针变量
	//int 说明pa执行的对象是int类型
	//举一反三:
	char ch = "w";
	char* pc = &ch;
	return 0;
}

如上,* 说明后面的pa是指针变量,前面的int表明pa执行的对象是int类型

同样下面的代码,pc是指针变量,而它执行的对象是char类型

所以,我们可以取出一个变量的地址,但如果要存起来,那么就要用到指针变量。

int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20;//* 叫解引用操作符  *pa就是通过pa里面的地址,找到a
	printf("%d\n", a);
	return 0;
}

指针变量的大小

int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(float*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(long long*));
	printf("%d\n", sizeof(double*));
	return 0;
}

发现所有的指针大小都是8

因为指针是用来储存地址的,指针需要多大空间,取决于地址的储存需要多大空间

所以指针的大小都是相同的 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值