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语言指针声明探秘
随机推荐
- WinCE 开发问题:不支持 Open Generic 方法的 GetParameters。
WinCE中用的是Newtonsoft.Json.Compact.dll序列化Json的, 今天用Json解析类的时候, 提示异常:不支持 Open Generic 方法的 GetParameters ...
- XML解析思想
获取文档中的数据: 反序列化[巧记:反读] 把内存中的数据存储到文档中: 序列化[巧记:序写] XML解析思想 DOM: 就是将文档中的数据全部加载到内存,在内存中形成DOM树,然后对数据进行增删改查 ...
- Qt开发经验小技巧合集
一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...
- GO 语言常用排序
1. 冒泡排序(bubble sort)的基本思想:比较相邻两个 元素的关键字值,如果反序,则交换 func BubbleSort(arr []int) { flag := false //外层控制行 ...
- lnmp搭建-手动版
参照链接:http://blog.csdn.net/bravemelon/article/details/64925499 centOS 下安装 Nginx yum -y groupinstall & ...
- PJzhang:ms17-010永恒之蓝漏洞在windows 2008R2中的复现
猫宁!!! 参考: https://www.anquanke.com/post/id/86245 https://xz.aliyun.com/t/2536 https://www.cnblogs.co ...
- JUC AQS ReentrantLock源码分析
警告⚠️:本文耗时很长,先做好心理准备,建议PC端浏览器浏览效果更佳. Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6 ...
- 理解clientX、clientY、offsetLeft、event.offsetTop、offsetWidth、offsetHeight、clientWidth、clientHeight、scrollTop、scrollHeight
一.clientX和clientY 事件发生时,鼠标距离浏览器的可视区域的X.Y轴的位置,不包含滚动条的区域的部分.就算是页面进行了滚动,鼠标的坐标值还是参考可视区域的. 二.offsetLeft和o ...
- CentOS7编译安装libc++和libc++abi
本文介绍了如何在CentOS 7中构建C++11构建环境 Clang的定制C++库是libc++(libcxx).然后,libcxx还需要一个ABI库,libc++abi(libcxxabi).不幸的 ...
- HDU6582 Path【优先队列优化最短路 + dinic最大流 == 最小割】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 来源:2019 Multi-University Training Contest 1 题目大意 ...