C语言系列——001关于指针的内容总结(基础)

本来都块写完了一篇文章, 结果草稿丢了,我去~~~

不过刚好,重新把指针这部分总结一遍。

通常大家都讲,指针是C语言的灵魂。虽然我也搞不懂为什么称之为灵魂,但是日常工作中,确实能够接触到这部分内容,为了能够在工作中灵活的进行一番运用,只能先把这块搞懂,搞清楚,抓住重点,后面如果有更深奥洗脑的知识点,就可以在此基础上旁征博引,融会贯通。

我个人觉得这块比较重要的知识点主要有以下几个部分:

  • 第一点:弄清楚变量和指针的区别

如图所示:

整型变量:

int a =10;

定义1个整型变量a,a的值为10;a的地址为0x00102BBF

指针变量:

int* p ;  //定义1个指针变量p;     int* 表示这个指针变量指向1个整型变量的地址
p=&a;     //p的存储内容为变量a的地址;(&为取地址符)

定义1个指针变量p,p的值为0x00102BBF(也就是a的地址) p的地址为0xXXX(先不care);

因为变量p当初存储的是a的地址,所以我们称变量p指向a;

好,基于此我们知道:

a为整型变量,p为指针变量; 且p指向a;

————————————————————————

  • 第二点 弄清两个符号 :“ * ” 和“ & ”

我们还需要弄清楚取值符和取地址符?怎么办呢?反复的验证即可;我理解这个感觉就像是英语语法一样。反复的去辨认磨练,就可以完全记住,理解通透;(遇到了就不放过,弄清楚就可以)

下面搞一堆代码,一起理解理解:

//number one
#include <stdio.h>
int main()
{
    int *p;     //定义1个指针变量p;没有具体给映射地址,所以仅仅是告诉大家这是定义1个指针,并且指向整型变量;
    int i=3;    //定义1个整型变量;它的值为3;
    p=&i;        //我们看,p前面没有前缀,代表直接对变量操作;  &i代表取出i的地址, 所以就是取出i的地址作为p的值;   -->也就是p指向了i;
    return 0; 
} 
//number two
int main() 
{
         int i=3;     //定义1个整型变量;它的值为3;
         int j;       //定义1个整型变量;未附初始值;
         int *p=&i;   //左边是取值符,右边是取地址符,所以其含义应该是取出i的地址,作为p的值; (这里指针变量的定义和赋值其实是放到一起了,也就是定义1个指针变量p。其值为变量i的地址;)
         j=*p;        //右边是取值符,也就是说,取出指针变量p指向变量的值,并赋值给j;
         printf("i=%d,j=%d",i,j);
     }

总结一下:

  • p保存了i的地址,因此p指向i

  • p不是i,i也不是p

  • 修改p的值不影响i的值(可能指向了另一个变量),修改i的值也不影响p的值(i的值变化,但是存储地址没有变;)

  • 如果一个指针变量指向了某个普通变量,则 *指针变量=普通变量 同时 指针变量=&普通变量; 即

*p =i;// 取值符; *p就是以p的内容为地址的变量

p=&i;//取地址符;

  • 第三点 指针的本质

弄清楚了语法的运用,再结合其本质理解一下:

1.什么是指针?

指针就是地址,地址就是指针。

地址:内存单元的编号 ,从零开始的非负整数; 地址一般会使用1个机器字进行存储,其大小一般为:

1个字节(8位单片机);

2个字节(16位单片机);

4个字节(32位单片机);

8个字节(64位单片机);

指针的本质就是一个操作受限的非负整数,两个指针之间只能进行减法运算,不能进行乘除加法运算

2.指针和指针变量的区分

指针就是地址,地址就是指针;

指针变量就是存放地址的变量;

指针和指针变量是两个不同的概念,但是通常我们叙述时,会把指针变量简称为指针(无所谓

3.指针的作用

  • 用来表示一些复杂的数据结构

  • 快速传递数据

  • 使函数返回一个以上的值

  • 能直接访问硬件 (这个是重点,,实际工作中,经常需要对单片机的某块内存地址直接进行操作;会用到指针;保密原因就不举例了)

  • 能够方便地处理字符串

  • 是理解面向对象语言中引用的基础

以上就是本文主要内容,欢迎共同探讨,共同进步。

加油!生活就是不断向前!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值