再谈指针

C语言为什么高效?因为C语言有指针。指针是C语言的精华,同时也是C语言的难点,很多人一学到指针就表示头大,指针的指向往往把人搞得晕头转向,甚至有的人为了避免使用指针居然不惜多写几十行代码,无疑增加了工程量,也降低了效率。那么指针到底是什么呢?又该怎么理解呢?这里我们先说说数据的存储。

在计算机中,数据存储的位置有两个,一个是硬盘,一个是内存,计算机一系列操作都是在内存上进行的。在写C语言程序时,所定义的变量按照不同的类型分别存放在栈、堆、常量存储区、自由存储区、全局/静态存储区。这里就拿栈区来说,局部变量存放在栈区,那么栈就会分给这个变量一段空间来放置这个变量,这个空间有一个地址与之对应,通过这个地址便可访问这个空间中存放的变量。这就好比你去宾馆住宿,前台会分给你一个房间,你就住在这个房间里,当你的朋友来找你时,就问前台你的房间号是多少,他就会根据这个房间号找到你,房间号就是你的地址,来找你就是访问。
在这里插入图片描述

程序在编译过程中,编译器在栈上开辟一个该变量类型大小的空间,这段空间的地址是0000000A(也可以是其他的,因为是随机分配的),然后再将变量a存放进去。这个地址就是一个指针,指针是变量,只是这个变量存的是地址,好比int a=10,a是一个变量,a中存放的是10。指针的用法如下:

int a=10;
int *ptr=&a;

因为指针是一个变量,所以可以改变指针的指向,使用指针时,就像使用其他变量一样,使用地址就像使用变量的值一样,只要按照这个思路去思考程序,就再也不会受到指针指向所引起的误扰了。

当我们访问这个数据时,只需对地址进行解引用即可,解引用的过程就是你的朋友根据房间号来找你。ptr中存放的是a的地址,*ptr就对ptr进行了解引用操作,*ptr的值为10,。同样我们可以对ptr解引用后给它重新赋值,这也就改变了变量a的值。这就好比宾馆服务员根据房间号找到你说,我们不做你生意了,请你搬出去,当你搬走时,服务员又让另一位客人住了进去。a的值在发生变化,好比现在这间房住的人的身份变了,但住的都是人。

指针不可怕,多尝试着使用它,你就会慢慢明白它的内涵,当你真正熟练掌握了指针,那么你就可以称之为c语言大师了,目前我也只是略懂个皮毛而已,灵活运用指针还很遥远,仍需努力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Word 2003中为什么修改一个段落的文章结果整篇文档的格式都变?

问题比如说,我选定某一段把颜色改成***,结果整篇文档都变成***了,按撤退健,才能达到效果(只有这段变成***,其他的不变)。答案打开格式菜单中的[样式和格式],找到样式中的“正文”。 …

链表反转的两种实现方法,后一种击败了100%的用户!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)链表反转是一道很基础但又非常热门的算法面试题,它也在《剑指Offer》的第 24 道题出现过,至于它有多…

squid代理服务器(捎带的SNAT)

1.传统代理传统代理可以隐藏IP地址 多用于Internet 在Linux中 默认没有安装squid 所以要安装 在red hat中 还要安装perl 语言包的支持 squid代理服务器需要两块网卡 首先保证你的流量是从linux服务器上过的 所以先保证做完SNAT可以互相通信1)配置网络参数在试验中一…

MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)最近无意间发现了一款开源免费的 MySQL 客户端管理工具,磊哥试用了两天感觉还行,所以今天推荐给各位…

memoryTraining记忆训练小游戏

无聊的时候用C写了一个记忆训练的小游戏、、、 灵感源于一个flash的小游戏学到C语言就用C语言实验了一下,做出来。好久以前的东西了,数组用的还不咋样,现在看看把数组下标0漏掉了、、、掉了修补了修补,先扔这儿吧。源码下载

动态调用动态库方法 .so

2019独角兽企业重金招聘Python工程师标准>>> 关于动态调用动态库方法说明 一、 动态库概述 1、 动态库的概念 日常编程中,常有一些函数不需要进行编译或者可以在多个文件中使用(如数据库输入/输 出操作或屏幕控制等标准任务函数&#…

算法图解:如何找出栈中的最小值?

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)前面我们学习了很多关于栈的知识,比如《动图演示:手撸堆栈的两种实现方法!》和《JDK 竟然…

用C语言设置程序开机自启动

当需要使某一程序在开机时就启动它&#xff0c;需要把它写进注册表的启动项中。 下面就展示一种简单的写法&#xff1a; #include <windows.h> #include <stdlib.h> #include <stdio.h>void ComputerStart(char *pathName) {//找到系统的启动项 char *szSub…

漫画:什么是布隆算法?

两周之前——爬虫的原理就不细说了&#xff0c;无非是通过种子URL来顺藤摸瓜&#xff0c;爬取出网站关联的所有的子网页&#xff0c;存入自己的网页库当中。但是&#xff0c;这其中涉及到一个小小的问题......URL去重方案第一版&#xff1a;HashSet创建一个HashSet集合&#xf…

css优先级机制说明

首先说明下样式的优先级,样式有三种&#xff1a; 1. 外部样式&#xff08;External style sheet&#xff09; 示例&#xff1a; <!-- 外部样式 bootstrap.min.css --><link href"css/bootstrap.min.css" rel"stylesheet" type"text/css"…

制作一个钟表

用EasyX制作的一个简易钟表&#xff0c;需设置字符集属性为多字节字符集。效果如下所示&#xff1a; GIF图会有些闪动&#xff0c;在实际中这种闪动几乎不可见。 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<graphics.h> #include<math.h…

趣谈MySQL历史,以及MariaDB初体验

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;MySQL 是一个跨世纪的伟大产品&#xff0c;它最早诞生于 1979 年&#xff0c;距今已经有 40 多年的历史了&#xff0c;而如今…

算法图解:如何判断括号是否有效?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;今天要讲的这道题是 bilibili 今年的笔试真题&#xff0c;也是一道关于栈的经典面试题。经过前面文章的学习&#xff0c;我想…

让人省心的事件委托

事件委托:利用冒泡的原理把实践添加到父元素级别上&#xff0c;触发执行效果。 时间委托优点&#xff1a; 1.提高性能&#xff0c;不用for循环遍历所有li&#xff0c;节省性能。 2.新添加的元素还会有原来之前的事件。 先看时间委托提高的性能吧&#xff0c;一个常…

最新版MySQL在MacOS上的实践!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 MacOS 上安装最新版的 MySQL 有三种方法&#xff1a;使用 Docker 安装&#xff1b;使用 Homebrew 运行 brew install mys…

忘记MySQL密码怎么办?一招教你搞定!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在安装完 MySQL 或者是在使用 MySQL 时&#xff0c;最尴尬的就是忘记密码了&#xff0c;墨菲定律也告诉我们&#xff0c;如果…

一文详解「队列」,手撸队列的3种方法!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;本文已收录至我的 Github《算法图解》系列&#xff1a;https://github.com/vipstone/algorithm前面我们介绍了栈&#xff08…

自定义设置一个屏保程序

用C语言写一个简单的窗口程序&#xff0c;目的是生成一个可视化的图形窗口&#xff0c;需要用到EasyX库&#xff0c;可在文章末尾的网盘链接中下载。该程序退出需左击鼠标&#xff0c;否则无法退出。 #include<stdio.h> #include<stdlib.h> #include<windows.h…

漫画:如何找到链表的倒数第n个结点?

————— 第二天 —————什么意思呢&#xff1f;我们以下面这个链表为例&#xff1a;给定链表的头结点&#xff0c;但并不知道链表的实际长度&#xff0c;要求我们找到链表的倒数第n个结点。假设n3&#xff0c;那么要寻找的结点就是元素1&#xff1a;如何利用队列呢&…

cacti添加I/O监控

首先下载snmpdiskio-0.9.6.zip,文件不好找&#xff0c;我已经放在本文章的附件里面。解压snmpdiskio-0.9.6.zip复制partition.xml到cacti/resource/snmp_queries/下面[roottest]# cp partition.xml /home/wwwroot/default/cacti/resource/snmp_queries/分别导入模板文件&#x…