C语言——指针总结
在创建指针时,我们首先要做的是先初始化它,没有初始化的指针是很危险的,因为指针可以指向一个地址后直接改变它的值,所以为了避免我们的指针在创建后指向一个危险区域(即可能指向系统文件等),我们会先给它一个空值( NULL 或者 ^ ),这就是初始化指针。
int *p = NULL; //定义一个指针,并将它初始化(指向 空 )
因为 NULL 是一个不指向任何内存位置的值,所以不用担心意外覆盖内存,不用担心意外改变某些值。如果不初始化,在使用指针储存一个值的时候,谁也不知道会覆盖什么内容。
我们来看一下指针的应用:
int a ; // 定义一个变量
p = & a ; // 这里指针 p 指向(储存)的是变量 a 的地址(& 是寻址运算符,作用是访问 a 的地址)
*p = a ; // 这里指针 p 指向(储存)的是变量 a 的值 (* 是间接运算符,作用是访问 a 的值)
我们使用指针,可以直接找到一个地址,然后改变它的值,看以下代码:
int *p = NULL ; // 定义一个指针,并将它初始化(指向 空 )
int n = 0 ; // 定义一个变量 n ,它的值为 0
p = &n ; // 指针 p 指向 n 的地址,此时 p 的值已经是 n 值 0 了
*p = 2 ; // 修改指针的值,这时也就通过指针间接修改了 n 的值
这时 n 的值已经由 0 变成 2 了0这就是通过指针间接修改了 n 的值,这也是我们喜欢用指针的原因,因为它灵活,方便,只要知道地址,我们就可以精确地找到我们要找的,并修改它;
为了让大家更理解,我们再在前面的代码后面加上两行:
++ *p ; // 自加
现在 n 的值已经变成 3 了,在上面的一行代码中,指针 p 自加了 1 ,值由 2 变成了 3 ,于是 n 的值也变成了 3 ;
指针还有一个让人容易迷糊的地方就是 指向指针的指针,其实只要理解了指针,指向指针的指针也很容易理解;
int **p1 = &p ; // 定义了一个指向指针的指针 **p1 ,并让它指向了 指针p;
此时, p1 指向(储存)的是指针 p 的地址,p1 指向(储存)的是指针 p 的值;所以此时 p1 的值是 p 的值 3 ;
此时若改变 p1 的值,那么根据指针的规则, 指针 p 的值会随之改变,而因为 p 是指向 n 的指针,所以 n 的值也会改变,这是一个传递的过程。
C语言——指针总结的更多相关文章
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C语言指针学习
C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 关于C语言指针的问题
在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
- C语言指针操作
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...
- C语言指针声明探秘
C语言指针声明探秘
随机推荐
- python脚本实现药品名自动翻译2
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- [drf]源码和序列化梳理
drf源码继承管理 # drf继承关系 View APIView as_view: 执行父类的as_view 调用dispatch dispatch init_request request.quer ...
- apt如何列出所有已经安装的软件包
apt如何列出所有已经安装的软件包 转 https://www.helplib.com/ubuntu/article_155294 问题: 我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看 ...
- Spring Boot中报错org.apache.ibatis.binding.BindingException: Parameter 'XXXX' not found. Available parameters are [0, 1, param1, param2]的解决办法
我这里的报错信息显示: org.apache.ibatis.binding.BindingException: Parameter 'reqUsername' not found. Available ...
- iOS-保存图片到相册
//保存 UIButton *saveBtn = [[UIButton alloc] init]; // saveBtn.frame = CGRectMake((screenWi ...
- swift 第六课 scrollview xib 的使用
现在 xib,stroyBoard 这种图形话的编辑写代码,越来越简单.以前scrollview 这样的控件不会用xib ,网上查了 好多的资料.现在把步骤逐渐的写出来, 这里顺便写个Demo ,是一 ...
- 移动应用端的支付宝支付php开发流程
1.https://openhome.alipay.com/ 支付宝开放平台并创建应用,审核通过后并签约app支付拿到pid 2.按照官方文档用 [RSA签名验签工具.bat]生成应用公钥和私钥 3. ...
- JS 正则表达式 控制文本框只能输入中文、英文、数字与指定特殊符号
JS 正则表达式 控制文本框只能输入中文.英文.数字与指定特殊符号(屏蔽表情输入) onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 只能输入中文: ...
- Ubuntu搭建Spring源码环境常见问题
在一心想要学习Spring框架源码时,我们会遇到很多麻烦的问题.开始本文前,你只需要拥有一个装好IDEA的Ubuntu系统就可以愉快启程了.如果还没有IDEA,可以参考在Ubuntu上安装Intell ...
- 通过bat批处理程序如何实现在多个txt文件后面加上相同的一行文字
通过bat批处理程序如何实现在多个txt文件后面加上相同的一行文字 set/p a=输入要增加的文字 for /f "delims=" %%i in ('dir /b *.txt' ...