c语言位向量机伞_一文读懂C语言精华-指针变量和指向指针的指针

1978年贝尔实验室正式发表C语言,受到众多IT从业者的热捧,即使41年过去了,C语言仍然牢牢占据最受欢迎编程语言前二的位置,许多人的程序开发之路也是从C语言开始的。

0035be8f655c66e0e74d553076394d2e.png

编程语言受欢迎排名

C语言简洁紧凑、灵活方便 ,相较于其它高级语言,直接操作地址是面向过程的C语言一大特点,也是C语言的精华所在。

变量的实质是地址

内存是存放数据的空间,变量是在内存中申请的一段空间大小,不同类型的数据占用的字节数不一样。

3605eb77f734f6fc0c88d21dc7cfcc98.png

变量申请

向内存申请了一个变量名为a的int型变量占4字节空间;向内存申请了一个变量名为b的short型变量占2字节空间;向内存申请了一个变量名为c的char型变量占1字节空间。

8749cef940c974c3fa91f058cac19ee9.png

变量内容存储

使用取地址符&,查看变量a、b、c在内存的地址

2015f8960d2c27ac8dbf654ad34b227c.png

变量在内存中的地址

指针变量

数据存放在内存中都会有对应的地址,而这个地址就是指针。C语言中使用指针,可以使程序简洁、紧凑、高效;也可以有效地表示复杂的数据结构;实现动态分配内存。

普通变量和指针变量的区别就是,普通变量的值是可以直接使用的数据,而指针变量的值则存放的是其他变量的地址。指针变量的定义与普通变量定义是一致的,只是在数据类型后加运算符 “*”,比如:

int * p;

定义的p是一个指针变量,可以存放一个整形变量的地址。通过“*”获取p指向的对象内容,运算符 “*” 是间接寻址或者间接引用运算符。当它作用于指针时,将访问指针所指向的对象。

78407404d9acc36933e48f1253d826f2.png

指针变量

04b1cd8e8236d0f9660759b49b1fb06a.png

变量p、变量a内存分布图

指针变量p指向变量a,p地址的内容是变量a的地址,a地址内容是数据30。

虽然64位系统里指针变量在内存中存放占用都是8个字节宽度,比如:

int * p, char * q; // 通过sizeof()查看都是8个字节

但还是要指定指针的类型,因为利用指针变量进行操作、运算时候,都涉及到指针变量指向的对象数据宽度。

除了通过指针获取内存数据外,还可以通过指针修改内存的内容:

04aa0d1e7a1d7e5f9a422fd9f4efda0d.png

通过指针修改对象值

下面通过程序看一下指针变量的赋值、运算:

ddabec27d484f5ed9c935aead0e7f0d9.png

指针变量运算

p是地址,p++地址累加,累加的步长正是指针向量的类型int(4个字节)。

指向指针的指针

前面说过可以用指针指向普通变量,那么可不可以在用指针指向指针变量呢?答案是肯定的。

32b1f917789fc43bfc42e4e101e7cf20.png

指向指针的指针

程序中指针的指针q指向的对象是指针变量p,指针变量p指向的对象是变量a。按照:&是取地址运算符,*是间接运算符(取的是指针对象),那么**q、*p、a是等价的,*q、p、&a是等价的、q、&p是等价的。

1986019fc1046b20ee2b1ab32b89acc4.png

指针指示图

谨记一条原则:所有数据存放在内存都有地址,普通变量的值是数据,指针变量的值是地址,所以指向指针的指针的值还是地址,只是这个地址的值是另一个指针的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值