大一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 ...
随机推荐
- P7514-[省选联考2021A/B卷]卡牌游戏【贪心】
正题 题目链接:https://www.luogu.com.cn/problem/P7514 题目大意 给出\(n\)个卡牌有\(a_i/b_i\),开始都是\(a_i\)朝上,将不超过\(m\)张卡 ...
- Kubernetes全栈架构师(资源调度下)--学习笔记
目录 StatefulSet扩容缩容 StatefulSet更新策略 StatefulSet灰度发布 StatefulSet级联删除和非级联删除 守护进程服务DaemonSet DaemonSet的使 ...
- 11204备库升级PSU
某系统PSU为11.2.0.4.190115,备库打补丁20年10月份(31537677)由readme可知:1.要求OPatch要求为11.2.0.3.23或之后的版本.2.非rac环境打补丁需要关 ...
- Linux 清空日志的五种方法
VIM 是linux下一款优秀的编辑器,但是上手难度略大,网络上可以找到的教程很多,快捷键也非常多,一时很难记住. 本文换一种思路,就是根据平时自己的常用需要,去反查VIM如何操作的,再记录下来,这样 ...
- 宝塔Linux面板搭建与安全狗安装(WEB服务器搭建与WAF安装)
环境 系统:CentOS 7.3 (64位) 软件: 宝塔Linux 7.7 网站安全狗Linux-Apache版V2.3.18809(64位) 宝塔面板 下载和安装 网址:https://www.b ...
- JavaScript中的函数、参数、变量
高中大学数学很差,学JavaScript,发现根本不理解其中的函数.参数.变量等概念. 李永乐老师教学视频:<高三数学复习100讲>函数 bilibili.com/video/av5087 ...
- Noip模拟69 2021.10.5
考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...
- segyio库的使用
最近在使用segyio库读取segy文件的时候默认读取总是出现问题,经过分析发现是我们通常所用的segy格式与本库的默认格式略有不同,修改参数就可以读取: 1) with segyio.open(fi ...
- stm32直流电机驱动与测速学习总结
通过实验发现,定时器的一个通道控制一个pwm信号. 在正式开始之前也可以参考这个视频学习资料 (stm32直流电机驱动) http://www.makeru.com.cn/live/1392_1218 ...
- 关于stm32串口必须要学的5个串口以及串口应用和注意事项
串口是我们常用的一个数据传输接口,STM32F103系列单片机共有5个串口. 其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Rec ...