『C + ⒈』指针
【博主简介】全网技术博客粉丝量十万全网技术博客学习数百万CSDN博客专家领域专家2021年博客之星物联网与嵌入式开发TOP52022年博客之星物联网与嵌入式开发TOP42021年2022年C站百大博主华为云开发者社区专家博主阿里云开发者社区专家博主掘金INFOQ腾讯云优秀博主目录指针 指针变量指针解引用概念解引用操作指针 指针变量首先问问大家一个小问题「指针和指针变量是同一个概念吗请选择你的答案﹗」A ― No[不]B ― Yes[是]C ― I don′t kown[我不知道]答案 ⇢ 不是 严格区分的话指针和指针变量它是属于两种概念。⒈在[C语言]上使用大部分的内容并不是指针严格意义上是指针变量。⒉在指针上严格意义上来说就是地址而指针变量它是一个变量就是存储(保存)地址数据。所以为什么博主在前面的文章实际上就说过 [指针地址] 地址是十六进制数据。那么现在我们通过就知道这两点到底是什么意思了。⒊指针是一个地址指针变量是一个变量。Ⅰ为什么需要指针答案因为通过指针可以提高CPU(中央处理器)寻址的效率所以我们必须得有指针。Ⅱ 什么是指针答案很简单记住指针就是地址。Ⅲ 地址是数据吗答案地址肯定是数据的这就相当于我和你说你家的门牌号小区号它是不是数据答案是肯定是啊因为门牌号上面不就是数字吗。那么我们就可以知道地址实际上是一种特殊的数据但它肯定是数据没错的。Ⅳ 地址需要开辟空间存储吗答案不需要。内存地址在计算机当中其实是通过硬件电路编址去完成的。Ⅴ数据可以被保存吗答案可以。地址就是数据地址可以被指针变量进行保存。拓展知识点⇢任何一个变量名在不同的应用场景当中代表不同的含义。示例代码如下↓int x 1; int y x;第一个x是x的空间变量的属性左值。[开辟的空间]第二个x是x的内容数据的属性右值。[x开辟空间的内容1]第二个示例代码如下↓#includestdio.h int main() { int* q NULL; int a 10; int b 20; int* p a; printf(*p %d\na %d, *p, a); p b; printf(\n*p %d\na %d\n, *p, a); q p; printf(*q %d\n, *q); }运行结果*p 10a 10*p 20 注→这里只是改变了指针变量p的值并没有改变指向取地址a的值a 10q 20第4行代码→定义了一个整形变量a大小10的值。第6行代码→定义了一根指针变量p指向了取地址a的值。第8行代码→p代表指针变量的空间。第10行代码→p取的是地址(内容)保存变量p的数据赋值给q。注→任何一个变量的地址是不允许被修改的只读属性。其实指针变量它就是变量只是保存的内容不同。指针解引用概念指针解引用的概念记得在我了解指针解引用的概念我是非常迷糊的甚至连下面的这个代码都分不清楚那么我们来看看下面这组代码如下↓int a 20; int *p a;⒈在上述代码当中一共定义两个变量分别是指针变量和整形变量。⒉在右侧的被称之为是字面值又或者是地址常数概念。⒊在这里只要我们定义了变量那么编译器就会给它们两个变量开辟一块空间这里(a)有对应的空间(p)也有对应的空间。⒋这里变量(a)存放的就是字面常数20的值而变量(p)存放的就是(a)的地址。所以为什么有时候会说这个变量(p) -[指向] 这个变量(a)的地址。注:首元素的地址。概念⇢①个(a)整形变量它占用的空间大小是四个字节于是它就具备四个地址。问题¹→我们实际在取地址的时候是取出那个地址。A:第一个B:第二个C:首元素地址D:全部答案:(C)记住一点我们取地址永远都是取最低为的那个地址。结论→任何变量数据类型取地址都是从最低为开始的。解引用操作int a 20; int *p a; *p 40;解引用的概念⇢拿出(p)的地址找到该地址所指向的变量(a) 在这里是(*p)是40的值赋值给对应的(*p)就相当于把40的值直接赋值给到对应变量(a)当中去。int b *p;在上述代码当中的(*p)还是一个解引用的操作找到(p)变量所对指向的地址(a)变量当中通过该地址找到所对应的该变量(a)值然后再把变量(a)的内容赋值给变量(b)的内容。结论→重点对指针进行解引用代表的含义是指针所指向目标的值。前提:类型相同。代码示例如下↓#includestdio.h int main() { int a 20; int* p a; printf(a %d\n*p %d\n, a, *p); *p 40; int b *p; printf(a %d\n*p %d\nb %d\n, a, *p, b); a 50; printf(a %d\n*p %d\nb %d\n, a, *p, b); int c 18; p c; printf(*p %d\na %d, *p, a); }运行结果a 20*p 20a 40*p 40b 40a 50*p 50b 40*p 18a 50简单的来说说倒数第二行代码的含义如下↓注→指针变量的值是可以进行改变的。但是指针变量所对应的地址改变的话同样的指针变量也会跟着发生变化。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2430450.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!