再谈指针

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,一经查实,立即删除!

相关文章

vc给exe更改图标

第一步:将制作好的ioc格式图标,拷贝到自己工程所在的res文件夹中第二步:在vc开发环境中,insert-->resourse--〉单击icon然后选择右边的import找到刚才添加到res中的图标文件第三步:将m_hIcon AfxGetApp()->Load…

人工智能ai知识_人工智能中基于知识的代理层

人工智能ai知识Every agent that has a knowledge base and an inference system is known as a knowledge-based agent. The knowledge base contains all the information the agent has. This information can either be the data that is embedded into the agent in prior…

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

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

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

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

C++总结篇(4)内存管理

C语言中用malloc/realloc/calloc/free进行空间的申请与释放,在C中用新的方式进行空间的申请与释放。 申请一个int型的空间并释放 //C语言:int *ptr(int)malloc(sizeof(int));free(ptr); //C: int *ptr new int;delete ptr; C的申请方式更为简洁方便&…

debug和release的区别

1。Debug和Release有什么区别,为什么要使用Release版本! 2。怎么把Debug转成ReleaseDebug版本包括调试信息,所以要比Release版本大很多(可能大数百K至 数M)。至于是否需要DLL支持,主要看你采用的编译选项。…

人工智能ai 学习_人工智能中学习代理的要素

人工智能ai 学习As already discussed, the Learning agents have the capability to improve their knowledge base by Learning from their surroundings by themselves, without any help or input from the user or the client. 如已经讨论的那样, 学习代理可以…

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

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

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

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

C++总结篇(3)String类

string是表示字符串的字符串类&#xff0c;该类的接口与常规容器的接口基本相同&#xff0c;再添加了一些专门用来操作string的常规操作。string在底层实际是&#xff1a;basic_string模板类的别名&#xff0c;typedef basic_string<char, char_traits, allocator> strin…

memoryTraining记忆训练小游戏

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

动态调用动态库方法 .so

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

C++总结篇(5)vector

vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它的大小会被容器自…

清除缓存 c语言_如何用C语言设置,清除和切换单个位?

清除缓存 c语言Given a number and we have to 1) set a bit, 2) clear a bit and 3) toggle a bit. 给定一个数字&#xff0c;我们必须1)设置一个位&#xff0c;2)清除一个位&#xff0c;3)切换一个位。 1)设置一点 (1) Setting a bit) To set a particular bit of a number,…

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

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

数据库概况

New Words & Expressions:facilitate 使容易&#xff0c;促进retrieval n. 检索field n. 字段record 记录&#xff0c;alphabetically 按字母顺序地chronologically 按年代顺序排break down v. 分解build up 建造&#xff0c;装配&#xff0c;组成encyclopedia n. 百科全书…

30岁之前需要知道的10个人生底线,你知道几个?

http://blog.csdn.net/wojiushiwo987/article/details/8893302 引导语&#xff1a;现在的这些年轻人&#xff0c;你是否考虑过你人生成长发展风向与目标&#xff0c;一旦追求和愿望受阻后&#xff0c;你会如何思考对应&#xff0c;分析其原因的所在&#xff0c;你该如何面对去做…

用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…

kotlin 字符串_Kotlin程序确定字符串是否具有所有唯一字符

kotlin 字符串Given a string, we have to check whether it has all unique characters or not. 给定一个字符串&#xff0c;我们必须检查它是否具有所有唯一字符。 Example: 例&#xff1a; Input:string "includehelp"Output:falseInput:string "abcd&qu…