C语言-指针到底是什么?
1、指针到底是什么?
(1)、指针变量与普通变量的区别
指针的实质就是一个变量,他跟普通变量没有任何本质区别。指针完整的名字应该叫做指针变量,简称为指针。
2、为什么需要指针?
(1)、指针的出现是为了实现间接访问。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。
(2)、间接访问(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了
汇编之上的C语言也必须实现间接寻址。
(3)、高级语言Java/C#等没有指针,那么他们怎么实现间接访问?答案就是语言本身帮助我们封装好了。
3、指针使用三部曲:
定义指针变量(int *p)、
关联指针变量(p = &a // 让p指向变量a )(p = (int *)4 //让p指向内存地址为4的那个变量)
解引用(*p = 555;//把555放到p所指向的变量中)
(1)、当我们int *p;定义一个指针变量p时,因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部
变量并且未初始化,则值是随机的),所以此时p变量中存储的是一个随机的数字。
(2)、此时如果我们解引用p,则相当于我们访问了以这个随机数字为地址的内存空间。那这个空间到底能不能访问
到就不知道了(可能行也可能不行),所以如果直接定义指针变量未绑定有效地址就去解引用的话,几乎会出现大的bug。
(3)、指针绑定的意义就在于:让指针指向一个可以访问、应该访问的地方,指针的解引用是为了间接访问目标变量。
4、*星号在用于指针相关功能的时候,有两种用法:
第一种:定义指针时,*结合前边的类型用于表明要定义的指针类型;
int *p; // *和int结合,表明p的类型是int *,也就是p指向int类型变量的指针。
第二种:用于指针解引用,解引用时*p表示p指向的变量本身。
int *p;
int a = 32;
p = &a; //这个地方就是第二种用法,这里不能写 *p = &a; 这样写的意思就是把a的地址给了p所指向的
那个变量(也就是地址为 内存中与p绑定在一起的那个内存空间里的数 的内存空间)。

C语言-指针到底是什么?的更多相关文章
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 2-Linux C语言指针与内存-学习笔记
Linux C语言指针与内存 前面我们对于: c语言的基本用法 makeFile文件的使用 main函数的详解 标准输入输出流以及错误流管道 工具与原理 指针与内存都是c语言中的要点与难点 指针 数组 ...
- c语言指针学习【转】
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- C语言入门---第九章 C语言指针
没学指针就是没学C语言! 指针是C语言的精华,也是C语言的难点. 所谓指针,也就是内存的地址,所谓指针变量,也就是保存了内存地址的变量.不过人们往往不会区分两者的概念,而是混淆在一起使用. ===== ...
- 闭嘴,给你一个数!1分钟,学完C语言指针,不扎手只扎心的针!
序言 指针是C语言学习者绕不过的一道坎,也是C语言学习者不得绕过的一道坎.辨别一个人C语言学的好赖就看他对指针的理解怎么样.指针内容也是工作面试经常问到的问题.本文将带你重新认识那个绊倒你的指针,以解 ...
- 难搞的C语言指针你搞懂了多少
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- 最容易出错的C语言指针
C语言指针说难不难但是说容易又是最容易出错的地方,因此不管是你要做什么只要用到C指针你就跳不过,今天咱们就以 十九个例子来给大家简单的分析一下指针的应用,最后会有C语言视频资料提供给大家更加深入的参考 ...
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
随机推荐
- node重点 模块
node模块 1.全局模块(对象)(像js中的window document) 定义:何时何地都可以访问,不需要引用 1.process.env 环境变量 计算机属性 高级系统设置 高级 环境变量 作 ...
- 十六、JavaScript之%运算符
一.代码如下 二.运行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...
- jar类库加载顺序
当我们启动一个tomcat的服务的时候,jar包和claess文件加载顺序: 1. $java_home/lib 目录下的java核心api 2. $java_home/lib/ext 目录下的jav ...
- HDU 5430:Reflect 欧拉函数
Reflect Accepts: 72 Submissions: 302 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...
- C++ 管道
// PipeServer.cpp : Defines the entry point for the console application. // #include "stdafx.h& ...
- Promise 练习
import { ModelClass } from "engine/injector/Injector"; import { Inject } from "core/i ...
- C++编程学习(二) 数据
博主已经有一些基础了,所以写的东西可能是容易错的,或者以前没记住的,或者是对理解知识点有帮助的.因此如果有纯小白看到了这篇博文,不懂的地方请自行百度啦~ 另外,本系列所有内容的图片均来自于西北工业大学 ...
- <老古董>1962年的线性支持向量机解法
我们说“训练”支持向量机模型,其实就是确定"最大间隔超平面". 用数学语言来说就是确定一个最优的W.好比训练一个逻辑回归模型的目的是确定最优的W和b. 输入 X,为一个n维向量 输 ...
- 标准JAVA工程结构
- xxe
XXE xml external entity injection xml外部实体注入 概述 xml是可扩展的标记语言,涉及被用来传输.存储数据 html被用来显示数据 其中xml的标签没有预定义的, ...