指针
指针,算是C语言的一大难点内容了,要将指针,首先来认识一下内存
内存

我们计算机的内存区域被分成了这样一个个小的内存单元

每个小格子被称作内存单元,,这些数字称作内存单元的编号
也称作地址
一个内存单元的大小为一个字节
在32位机器上,拥有着32跟地址线地址线通电后,电信号转换为数字信号就是1/0(低电平为0,高电平为1)
通电后产生的所有可能性为:

共有2的32次方种可能
每一个二进制序列都会作为内存单元的编号
共有2的32次方个地址,一个地址占一个字节的空间,所以共能管理2的32次方个字节的空间
2的32次方字节 = 4294967296字节/1024/1024/1024 = 4GB空间
每个内存单元的编号就称作地址,C语言中把地址称作指针
编号 == 地址 == 指针
a要向内存申请4个字节的空间

&
取地址符号
%p
打印地址 ,显示的是16进制的数值
打印出来一个地址

我们调试并打开内存窗口

a所占的空间就是这4个字节

我们打开内存窗口,将每一列设置为1行,就会发现这些小格子就是一个内存单元

关于我们的10为什么会写成
0a 00 00 00
我们10的二进制序列是
00000000 00000000 00000000 00001010
为了方便,我们可以将而进制转换为16进制,四个2进制可以转换为16进制
依次转换为00 00 00 0a (2进制的1010是10,16进制的10~15就用a~f来表示)
这个数据在内存中是倒着放的
取地址然后把地址存起来,这里的pa就叫指针变量,因为a的类型是int,所以pa的类型就是*pa

* 说明pa就是指针变量
int 说明pa指向的对象就是int类型的
举一反三:

指针,本质是地址
口头语中,说的指针是指:指针变量
这里的*是解引用操作符,意思是通过pa里面存放的地址,找到它所指向的对象

*pa 就是a
而这里的*pa = 20;的意思是给 a 赋值20


在64位的环境下打印出来的结果全是8,跟类型毫无关系

我们有时候并不能得到a 只能得到a的地址,所以才会用*

好了,初识就先到这,后面再细讲
现在再认识一下另一个以后会常见的知识点——结构体
结构体
人: 名字+年龄+性别+电话+住址
书:书名+作者+出版社+定价+书号
对于复杂对象的描述,C语言提供了结构体
结构体应用

结构体变量.结构体成员
我们也可以使用指针,打印

还可以这样表示

还可以自己输入然后打印
![]()
因为age是变量名,所以需要取地址
1330

被折叠的 条评论
为什么被折叠?



