大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
“指针是C语言的灵魂”这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为。。。。难,真难;下面说一下我对这句话的见解:
C语言拥有着其他语言所没有的特性---直接访问内存空间,并进行操作,与这个功能对应的工具便是指针。博主刚开始用 DEV-C++ 那段时间嘛,就有时候写着写着系统提醒我有病毒,而且每次都是我用 Dev-C++ 的时候,我就纳闷了,我这用的好好的,怎么会是病毒软件呢?现在我大概明白了,指针会直接操作内存空间嘛,而可以随意进出一台电脑的内存空间,是什么东西?病毒呗!那身为一个小菜鸡,我怎么会那么早就用到指针呢,你还真别说 ,scanf(“%d”,&a)“&”这小玩意你看像不像取地址符(手动狗头);总之C语言的指针既是高效的,又是危险的。我的电脑是这么对我自己敲的代码的:

我一口盐汽水喷死你,我自己写的东西,担心个锤子 (╯°□°)╯︵ ┻━┻
#什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?
- 指针就是地址,而地址又是什么,举个栗子:一个酒店有很多个房间,每个房间上都有着不一样的房间号,而这些地址就类似于这些房间号;那么每个房间号又是多少位的呢?就32位操作系统而言,每个房间号也就是32位的,“32位”指的是二进制的32位,而1字节代表8位,所以1个地址就占4个字节,而对于 int a=1,尽管我们给变量赋值一位数这么小的数,他在内存单元中依旧是以 32位 储存的,1位数就1位数呗,前面补31个0不就完了;我们可以通过地址来精确地找到房间,这些房间就相当于内存单元,那什么又是内存单元?想要使用变量,就先要在内存中占用一块内存单元,然后才能向内存中储存不同的数据;
举个栗子:
(&88)是地址;
(&变量 a)也是地址;
- 指针变量不同于指针,指针只是地址罢了,而指针变量就是储存地址的一种变量,所以指针变量又叫做地址变量;它也像储存其他数据类型的变量一样,只不过储存的东西是地址;
举个栗子:
int *q,double *q,char *q,这些都是指针变量,只不过他们所指向的内存所储存的数据的类型不同罢了;
在定义了 int *q;的前提下,q 就是指针变量;
- 取地址符“&”的作用就像它的名字一样,它可以把变量的地址取出来,也可以把88这样的数字等在内存中占用的地址取出来;
举个栗子:
#include<stdio.h>
int main()
{
int a;
a=88;
printf("%d\n",&a);//这里的&就是把88的地址取出来,并以整型的形式输出
a=99;
printf("%d\n",&a);
//从这里可以看出,我们虽然对 a 赋了不一样的值,但这并没有改变 a 地址
}
运行结果:
6487580
6487580
--------------------------------
Process exited after 5.253 seconds with return value 8
请按任意键继续. . .
- 指针运算符“*”的作用就是根据指针变量所提供的地址来找到“这个地址所对应的内存里放了什么东西”;所以说其实“*”和“&”其实就像是两个方向恰好相反的指路牌:“*”是由地址变量指向什么东西,而“&”就是由什么东西指向指针变量;所以说“*”可以读作“地址指向XX”,“&”可以读作“XX的地址”
辅助理解代码:
#include<stdio.h>
int main()
{
int a;
a=1;
printf("%d\n",a);
int *q;
q=&a;
// q 指向 a
printf("%d\n",*q);
// *q 就相当于变量 a,所以输出1
*q=2;
printf("%d\n",*q);
//“*q=2”等价于“a=2”所以这里会输出2
printf("%d\n",a);
//同理。这里也输出2
}
运行结果:
1
1
2
2
--------------------------------
Process exited after 5.41 seconds with return value 2
请按任意键继续. . .
博主水平有限,若文章有错误或不当之处,请狠狠批评博主 (~ ̄(OO) ̄)ブ
大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?的更多相关文章
- 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项
博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...
- 大一C语言学习笔记(9)---指针篇--从”内存的使用“和“流程控制”的角度来理解“指针变量的使用‘
#深入理解指针变量 举个错误栗子: //以下代码的目的是输出100和1000,但输出结果只有一个100 #include<stdio.h> #include<malloc.h> ...
- 大一C语言学习笔记(2)---快捷键篇
大家好,博主呢,是一位刚刚步入大一的软件工程专业的大学生,之所以写博客,是想要与同样刚刚接触程序员一行的朋友们一起讨论,进步,在这里记录我的一些学习笔记及心得,希望通过这些点点滴滴的努力,可以让我们离 ...
- 大一C语言学习笔记(8)---指针篇--动态内存是什么?与静态内存有什么区别?怎么使用动态内存,有什么需要注意的地方?
静态内存指的是在编译时系统自动给其分配的内存,运行结束后会自动释放:静态内存是在栈中分配的: 动态内存是我们程序员手动分配的内存,正常情况下,程序运行结束后,也不会自动释放,所以为了避免发生未知的错误 ...
- 大一C语言学习笔记(10)---编程篇--制作简易计算器,支持加,减,乘,除,取余运算,要求 0 bug
博主自开学初就一直在努力为自己的未来寻找学习方向,学习编程嘛,尽量还是要抱大腿的,所以我就加入了我们学校的智能设备研究所,别的不说,那的学长们看起来是真的很靠谱,学长们的学习氛围也超级浓厚,所以我就打 ...
- 大一C语言学习笔记(6)---自省篇--流程控制;break,continue,return间的异同;数组应用到循环语句中需要注意的问题;++i 和 i++的异同等。
下面是傻瓜博主"曾经"犯过的错和一些心得: ༼ つ ◕_◕ ༽つ 1.要想流程控制学好,一定要学会化繁为简,举栗子: 三目运算符 (略?略:略)---就是一个数字嘛, ...
- 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;
考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...
- 大一C语言学习笔记(4)---自省篇
博主"曾经"做过的傻事: #你有的*没打全 #你用/的时候没考虑()是一对的 #printf随后加\n #所有变量只要用,就一定要定义数据类型 #sqrt()代表根号 #inclu ...
- GO1.6语言学习笔记1-基础篇
一.GO语言优势 可直接编译成机器码,Go编译生成的是一个静态可执行文件,除了glibc外没有其他外部依赖 静态类型语言,但是有动态语言的感觉 语言层面支持并发.Goroutine和channel ...
随机推荐
- 一篇文章告诉你Python接口自动化测试中读取Text,Excel,Yaml文件的方法
前言 不管是做Ui自动化和接口自动,代码和数据要分离,会用到Text,Excel,Yaml.今天讲讲如何读取文件数据 Python也可以读取ini文件,传送门 记住一点:测试的数据是不能写死在代码里面 ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格04)
ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承 ...
- 解决Pycharm无法显示matplotlib绘图问题
最近开始接触matplotlib, 1.首先安装matplotlib库和其依赖的一些其他库,例如:numpy,scipy和pandas等 2.开始进行简单的编码工作,并在PyCharm中运行,出现如下 ...
- C++: 基于四叉树数据结构的自适应网格(初探)
C++: 基于四叉树数据结构的自适应网格 二叉树是一种典型的非线性存储数据结构,查找效率可以达到\(O(log_2N)\),同样,这类树状结构存在许多种变体,详细参考邓俊辉老师的<数据结构C++ ...
- Serverless 在 SaaS 领域的最佳实践
作者 | 计缘 来源 | Serverless 公众号 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势 ...
- JavaScript兼容性汇总
一般兼容性问都体现到DOM和事件上 只聊ie6+版本浏览器,希望小伙伴们别纠结更低版本浏览器哈^_^ DOM 获取元素 document.getElementsByclassName 不兼容ie6 ...
- Go语言核心36讲(Go语言进阶技术三)--学习笔记
09 | 字典的操作和约束 至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天 ...
- [JUC-5]ConcurrentHashMap源码分析JDK8
在学习之前,最好先了解下如下知识: 1.ReentrantLock的实现和原理. 2.Synchronized的实现和原理. 3.硬件对并发支持的CAS操作及JVM中Unsafe对CAS的实现. 4. ...
- 初始HTML04
HTML 列表标签 无序列表 默认用实心圆点标识列表项 1 <ul> 2 <li>list item 列表项</li> 3 <li>list item ...
- 【UE4】GAMES101 图形学作业2:光栅化和深度缓存
总览 在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣.所以这一次我们继续推进一步--在屏幕上画出一个实心三角形,换言之,栅格化一个三角形.上一次作业中,在视口变化之后,我 ...