7.初识指针

image-20211222214846269

指针

一、地址的分配 image-20211224212407011

1.假设我们一个内存放上一个比特得出来的结果也就是

2的32次方个内存单原也只能存放0.5G的大小

image-20211224213043443

假设我们定义一个a的数据类型为char,因为char类型是最小的数据类型,所以a就是一个字节,但是由于1byte=8bit,所以这个a就要被分配8个地址,如此以来,倘若定义一个int类型就要占据32个地址,这样就有点资源浪费了。

2.所以最后决定一个内存单元给定一个字节的大小

我们分析得出结论

二、通过指针找变量地址

int main()
{
	int a = 10;  //a在内存中分配的空间是4个字节
	int * pa = &a;  //第一个来识别pa是存放内存地址的,在C中pa就叫指针变量
	//* 说明是指针变量
	//int 说明指针类型是int
	//printf("%p\n", &a);  //%p是专门用来打印地址的
	return 0;
}

分析

1.&a

&a拿到的是四个字节中的第一个字节地址 通过这个地址来获取变量的位置

2.*

说明是指针变

3.int *

说明指针类型是int

4.%p

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

三、解引用,逆向操作,

int main()
{
	int a = 10;
	int* pa = &a;
	*pa = 20; //通过*pa里面的地址找到a,以后我们改变变量值的时候也可这样间接去改变
	printf("%d\n", a);
	return 0;
}

//通过获取a的地址来改变它的值

三、测试

int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(int *));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(long long*));
	return 0;
}
//这里的打印结果都为地址长度8
//指针需要多大的空间,取决于地址的存储需要多大的空间

这是因为在指针中,指针需要的空间取决于地址的空间大小,xx *是寻找其地址的,在32位机器上有32分bit,也就是4个字节,不管什么数据类型,其地址大小都是4

如果是64位机器,就全部为8了,64bit=8byte

posted @ 2021-12-30 13:36  灯明三千  阅读(41)  评论(0)    收藏  举报