指针地址指针变量

指针

1.什么是指针?

指针就是用来存放地址的。

我国的国土面积大,但人均占有少,合理分配极为重要。

以一栋楼房为例子,一层10户,5层便是50户。送外卖若是只知道目标在这一栋中,而无门牌号及其他的信息,只能挨家挨户的找过去,无用的消耗巨大。

若是有门牌号及详细的地址信息,便可省去不必要的麻烦,即可节约时间减少占用。

本章节对的指针亦是如此。

内存会划分一个个的内存单元(一个内存单元的大小为:1byte

每个内存单元都有一个编号

以电脑的内存例子:

以32位的电脑为例,电脑要去访问这个内存空间,要生成地址,

32位的电脑在生成地址的时候。硬件的电路就要生成地址,

地址线(通电的时候就会产生电信号)

1/0(正脉冲/负脉冲)

如果说32位机器上,有32跟地址线,每根地址线上都有电信号,如下图

在这里插入图片描述

此时电脑具有的内存大小

在这里插入图片描述

换算为GB时的大小:

在这里插入图片描述

2.获取一个整数的位置

2.1定义一个整型的变量,并用&地址符获取地址

使用取地址符“&”获取指针地址

在这里插入图片描述

打印指针

在这里插入图片描述

a的地址就是当前4个字节中的第一地址,首地址

假设a被分到了5、6、7、8,4个字节的空间,那么a将会在5的位置被存储起来

在这里插入图片描述

2.2监视获取a的地址

调试——>逐语句——>逐过程

调试——>窗口——>监视——>添加要监视的项(输入a和&a),获取a的值和a的地址

在这里插入图片描述

2.3内存查看a的信息

调试——>窗口——>内存,输入a的地址或(&a),来获取a所占用的内存信息

在这里插入图片描述

2.4 a的内存占用解析

在这里插入图片描述

使用一列可以看到4个地址的另外三个00 00 00分别是39 3A 3B(十六进制的)

在这里插入图片描述

其中0a 00 00 00,分别代表了4个字符中的一个字符。

内存中是倒着存的十六进制,如果是二进制的10太麻烦了,就写成16进制了。

在这里插入图片描述

3.使用%p打印a的地址

使用%p打印a的地址,地址的类型是int*

# define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	int a = 10;//向内存申请4个字节(int的大小)存储10
	//&a;//地址符&,获取a的地址
	printf("%p\n", &a);
	int* p = &a;//地址的数据类型是int*,这时候的p就是指针变量
	printf("%p\n", p);
}//输出:a的地址

3.2使用*p修改对象的值

**是解应用操作符,意思是通过p中存放的地址,找到p所指向的对象,p就是p所指向的对象

例子中是通过a的指针变量p,通过*p找到a的值,并修改为20.

*p = 20;//*是解应用操作符,意思是通过p中存放的地址,找到p所指向的对象,*p就是p所指向的对象
printf("%d", a);

同时,&a和*p都是单目操作符

4.指针变量的大小

都是指针变量大小一样,在需要不同的空间的时候不一样。

# define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int main() {
	//不管是什么类型的指针都是在创建指针变量
	//指针变量是用来存放地址的
	//指针变量的大小取决于一个地址存放的时候需要多大的空间
	//32位机器上的地址:32bit-4byte,所以指针的大小是4个字节
	//64位机器上的地址:64bit-8byte,所以指针的大小是8个字节
	printf("%zu\n", sizeof (int*));
	printf("%zu\n", sizeof (short*));
	printf("%zu\n", sizeof (long*));
	printf("%zu\n", sizeof (float*));
	printf("%zu\n", sizeof (double));
	printf("%zu\n", sizeof (char* ));
	//左上角的X86就是32位bit,X64就是64位bit,可以调节查看指针变量大小的变化
	return 0;
}

5.多个指针

int * p = &a;
int* p = &b;//两种之间的空格不一样,但是没有什么区别
int* p,a,b;//这三个变量中只有p是指针变量,其他的两个都是int类型的变量
int *p,*a,*b;//这样的三个才都是指针变量

4.简单来说

内存单元——>编号——>指针——>地址也被称为指针

所以存放地址或指针变量称为指针变量(所以上方的int* b = &a;就是指针变量)

一般讲p是指针,其实就是p是指针变量

在这里插入图片描述

int * p,int说明p指向的对象是int类型的,*说明p是指针变量

同理:

char z = "w";
char* q = &z;//char 说明q指向的对象是char类型的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值