【C语言】day7.初识指针

内存

计算机中的内存参考现实生活中的房间,编号来存储。

怎么编号?

32位机---,64位机---

以32位机为例,32位机---32根地址线---物理线--通电---正负信号1/0,于是就可以产生从00000000000000000000000000000000到1111111111111111111111111111111111111111的不同信号,把这2^32个不同的信号当做地址来给内存单元编码。

每个内存单元存储的空间是多大?一个内存单元是一个字节

-------------------------------------------------------------------------------------------------------------------

%p,用来打印地址的格式占位符

int a=10;

a为整型,占了4个字节,也就是占了4个内存单元,但是打印a的地址时,我们只需要知道a的第一个字节地址即可,剩下的三个地址为依次递增。

同理,int arr[ 5]={ 0};

arr[0],与arr[1]的地址相差了4个字节。

---------------------------------------------------------------------------------------------------------------

假设有一个变量p1用来存储a的地址,那么这个p1就叫做指针变量,声明格式如下。

int *p1= &a;

&a为取出a的地址

p1说明p1是一个指针变量。p1的数据类型为int *

int* 说明指针变量p1指向的是一个整型数据。

指针变量的数据类型必须要与指向对象的数据类型相同

---------------------------------------------------------------------------------------------------------------

int a=10;

int *p1=&a;

*p1=20;

第三行代码中,*叫做解引用操作符,*p1就是通过p1里面的地址找到a,最终将20赋给a。

指针的声明有两种形式,

一种为 int *p1=&a;

一种为int *p1;p1=&a;

只有成功初始化*p1以后,才能对*p1赋值,此时相当于间接对a赋值

不能写成 int *p1;*p1=a !!!!!!

不能对指针变量赋值!!!!,即不能写成p1=100;

使用%d打印p1时,得出的是一个随机数,因为p1的数据类型是int*

同时,*p1自身也有一个存放地址

指针本身的大小与32位机/64位机有关,32位机时统一为4字节,64位机时统一为8字节。vs2022在编程界面上方选择x86为32位机,选择x64为64位机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值