11-初识指针

指针

内存(C语言是可以对内存进行直接修改的)

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

  内存的使用和我们现实生活中空间的使用有一定类似的地方

内存是怎么编号的?

32位机器是指32根地址线,32根物理线,32根物理线通电会产生1/0

64位机器是指64根地址线,64根物理线,64根物理线通电会产生1/0

正点1,负电0.如果32根线全是负电0,则为0

=========================================

电信号转换成数字信息:1和0组成的二进制序列

所以对于32位机器,可以使用2^32次方进行编号

2^32=0001 0000 0000 0000 0000 0000 0000 0000 0000

转成十进制就是4294967296 Bit/8=536870912 Byte /1024 = 524288 Kb/1024=512 Mb /1024 =0.5Gb

 

所以32位电脑可以分配0.5GB个空间

 

0.5GB*8=4G,所以32位电脑最高支持4GB电脑

 

 

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

一个内存单元是一个字节(1Byte=8bit)

 

举例

#include <stdio.h>
int main()
{
	int a = 10;
	return 0;
}

 

在VS中,F10调试,打开监视和内存两个窗口,搜索框输入&a。便可以看到变量a在内存中的地址。因为a是整型,在内存中占4个字节。而取地址符&取的只是4个字节中的第一个地址。

%p是专门用来打印地址的

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

指针的使用

#include <stdio.h>
int main()
{
	int a = 10;
	printf("%p\n",&a);
	int * pa = &a;//此时pa是用来存放变量地址,在C语言中,此时此刻,pa叫做指针,指针不等于变量地址,指针只是用来存放变量地址的一个容器.*说明pa是指针变量,int说明pa指向的对象是int类型。
	char zifu = "zifu";
	char* zifu_zhizhen = &zifu;
	return 0;
}

注:指针不能指向自己

解引用操作符

#include <stdio.h>
int main()
{
	int a = 10;
	int * pa = &a;//此时pa是用来存放变量地址,在C语言中,此时此刻,pa叫做指针,指针不等于变量地址,指针只是用来存放变量地址的一个容器.*说明pa是指针变量,int说明pa指向的对象是int类型。
	*pa = 20;//*在这里叫做解引用操作符 *pa就是通过pa里面的地址找到a。所以这里可以理解位*pa=a=20
	printf("%d\n",a);
	return 0;
}

 

所以从上图中可以看出来,指针就是存放地址的容器。

指针的大小

指针的大小都是相同的,指针是用来存放地址的。指针有多大取决于地址的存储需要多大空间。。32位机器上需要4个字节(32bit/8bit(内存单元大小))。64位电脑上是需要8个字节(64bit/8bit(内存单元大小))

在VS中,我们可以随意切换X86/64平台。以此模拟在32位/64位机器上的表现

#include <stdio.h>
int main()
{
	int a = 10;
	int * pa = &a;//此时pa是用来存放变量地址,在C语言中,此时此刻,pa叫做指针,指针不等于变量地址,指针只是用来存放变量地址的一个容器.*说明pa是指针变量,int说明pa指向的对象是int类型。
	*pa = 20;//*在这里叫做解引用操作符 *pa就是通过pa里面的地址找到a。所以这里可以理解位*pa=a=20
	printf("%d\n",a);
	printf("%d\n",sizeof(char *));
	printf("%d\n",sizeof(short *));
	printf("%d\n",sizeof(int *));
	printf("%d\n",sizeof(long *));
	printf("%d\n",sizeof(long long *));
	printf("%d\n",sizeof(float *));
	printf("%d\n",sizeof(double *));
	return 0;
}

VS不能切换32/64

打开配置管理器

 

posted @ 2022-09-04 15:44  裆朝大学士  阅读(17)  评论(0)    收藏  举报