大一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 ...
随机推荐
- a标签的href属性拼接问题
<a id="nickName" href="/community/user/userinfo?nickName="></a> 如上所示 ...
- 踩坑系列《二》NewProxyResultSet.isClosed()Z is abstract 报错踩坑
在运行测试类的时候莫名其妙的报了个 NewProxyResultSet.isClosed()Z is abstract 这个错误,之前出现过这个错误,以为是版本出现了问题 就将版本 0.9.1.2 改 ...
- Django整理(五) - 请求与响应 - request对象
请求对象 一.客户端传参的几种方式 1. 通过URL路径(path)传递,例如:http://127.0.0.1:8000/news/1/2,两个参数:id和page 2. 通过 query stri ...
- 测试rac数据文件建本地及处理
模拟用户zytuser的表空间ZYTUSER_TBS表空间添加数据文件到本地.--环境准备1.创建一个表空间--创建表空间create tablespace ZYTUSER_TBS datafile ...
- 洛谷2900 [USACO08MAR]土地征用Land Acquisition (斜率优化+dp)
自闭的一批....为什么斜率优化能这么自闭. 首先看到这个题的第一想法一定是按照一个维度进行排序. 那我们不妨直接按照\(h_i\)排序. 我们令\(dp[i]\)表示到了第\(i\)个矩形的答案是多 ...
- PG集群(PostgreSql环境)搭建
centos PG集群搭建 一.安装PG 1.安装之前首先查看软件是否已经安装 rpm -qa | grep postgresql #若存在,需要卸载使用 yum remove postgresql ...
- javascript高级程序设计第三版书摘
在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...
- Golang通脉之类型定义
自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. type是Go语法里的重要而且常用的关键字,type绝 ...
- Abp VNext分表分库,拒绝手动,我们要happy coding
Abp VNext 分表分库 ShardingCore ShardingCore 易用.简单.高性能.普适性,是一款扩展针对efcore生态下的分表分库的扩展解决方案,支持efcore2+的所有版本, ...
- py3.8安装
ubantu python3.8# 命令下载wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz#解压tar -xvJf P ...