本专栏介绍:免费专栏,并且会持续更新C语言知识,欢迎各位订阅关注。
关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章,坚持更新!
大家的支持才是更新的最强动力!
文章目录
- 一、什么是指针?
- 1.1 访问内存地址
- 1.2 指针的概念及作用
- 二、如何定义指针
- 2.1 方式1
- 2.2 方式2
- 三、指针符号*的两个含义
- 3.1 第一个含义
- 3.2 第二个含义
- 总结
- 思考题
一、什么是指针?
1.1 访问内存地址
一样的事物出现往往先是有需求,或是改进以往不好的地方,在C语言中,指针的出现又是因为什么呢?
回顾一下,在C语言之前我们是如何访问内存地址的呢?
采用汇编指令间接访问;十六进制数直接表示地址。
而随着语言越来越高级,发展出了汇编语言以上的高等语言,首先出现的就是C语言了,因此指针的作用就是代替汇编语言中寻址指令的功能。
1.2 指针的概念及作用
如此我们引出了指针的概念:
在计算机科学中,指针(Pointer)是一种变量,又称为指针变量,它存储了一个内存地址,用于指向其他变量或数据的位置。指针可以被用来直接访问和操作内存中的数据。它提供了一种灵活而强大的方式来处理和管理数据。
以及作用:
间接访问内存地址。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。
二、如何定义指针
指针变量的定义和初始化方式:
2.1 方式1
先定义后赋值:数据类型*变量名
例如:
int a=1;
int*p;#p即被定义为一个指针。
p=&a;#将a的值赋值给p
2.2 方式2
定义的同时初始化:数据类型*指针的变量 = &变量名
例如:
int*p=&a;
定义指针变量p的时候初始化。这里P前面的*理解跟定义时相同,表示p是一个指针。实际上赋值效果等同于p=&a
三、指针符号*的两个含义
例如:
int a=1;//定义变量a。
3.1 第一个含义
Int *p;
定义指针变量p,该指针指向一个整型数。这里的 *p含义不是代表指针变量p所指向的那个变量,在定义时这里的 *p只是为了告诉编译器p是一个指针而已, P=&a;&a:代表变量a的地址值。将变量a的地址赋值给p,完成“绑定”。那么此时 *p等于a的值,也就是1。
3.2 第二个含义
*p=123;
修改变量a的值。代表指针变量p所指向的那个变量,也就是变量a。即:
*p表示变量p指向跟他“绑定”的那个变量a。可以直接将 *p当作a
Printf(“a=%d”,a)
总结
(1)指指针间接访问功能(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了汇编之上的C语言也必须实现间接寻址。
(2)
思考题
高级语言如Java、C#等没有指针,那他们怎么实现间接访问?
答案是:语言本身帮我们封装了。