【开卷数据结构 】指针的初步认识

这篇具有很好参考价值的文章主要介绍了【开卷数据结构 】指针的初步认识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

说到指针,想必大家都不陌生,指针的最大特点就是难以理解,它是编程中很基础也是很重要的概念,指针可以有效的实现像树,链表这类高级的数据结构。


什么是指针

在了解指针是什么之前,我们需要先了解什么是计算机的内存,什么是地址。


什么是内存

内存:计算机内存大部分时候指的是随机存储器也就是RAM,用于存放当前正在执行的变量或程序对象。

什么是地址

地址:变量的值存储在计算机的内存中,每个变量都占据一个特定的位置。每个内存位置都由地址唯一确定并引用,就像一条街道上的房子由它们的门牌号码标识一样。通过地址才可以找到内存中的变量。


当我们声明一个整型类型的变量 i 时,计算机会为这个特定的变量分配一定的空间,具体分配多少空间取决于数据类型

【开卷数据结构 】指针的初步认识

存取内存单元数据的方法

存取内存中单元数据一般有两种方法,第一种是直接访问,第二种是间接访问。

直接访问——按变量名存取变量的值

例如:

	int x;
	x = 10;
	printf("%d",x);

间接访问——通过变量的地址来存取变量的值。

这一方法也称为「 指针访问 」,实现这一方法有两个问题需要我们解决。

Q: 如何得到变量的地址?如何取得该地址下的数据呢?

为了解决这一问题,我们需要认识两种运算符。

“ & ” —— 取地址运算符。地址为一个16进制的整数。%d(10进制)或 %x(16进制)

“ * ” —— 间接访问运算符。作用:返回该地址所指向存储单元的数据。

通过这两种运算符我们就能实现间接访问了。


指针变量的定义

指针变量的定义形式如: 数据类型 * 指针名

//分别定义了 int、float、char 类型的指针变量
int *x;
float *f;
char *ch;

指针变量使用注意事项

(1)指针变量中只能存放地址

//非法赋值
int *p;   p = 2001;       

(2)不能对未赋值的指针变量进行 “ * ” 运算

 //非法赋值
int *p;   *p = 10;       

指针、间接访问和变量

案例分析

我们来看看下面这个式子是什么意思。

*&a = 15;   
思考一下,先别看答案

正确答案就是将值25赋给变量a。我们来分析一下这个式子。

首先,通过取地址运算符 & 产生变量 a 的地址,他是一个指针常量。

然后间接访问运算符 * 访问其操作数所表示的地址。在这个表达式中,操作数是 a 的地址,所以就把值 25 储存在 a 中。

作用

这条语句与a = 25有什么区别吗?
从功能上讲,确实没有什么区别;从性能上讲,前者又大又慢;从可读性来讲,前者看起来很恶心。因此,一般没有人用*&a这样的表达式 ,除非你想整活

指针的指针

来个例子
int a = 10;
int *b = &a;
int c = &b;

很明显,变量b是一个指向整形a的指针,那么变量c是什么呢?

变量c是指向b类型的指针,也就是指向“指向整型的指针”的指针,通俗来讲,就是指向指针的指针。
我们也可以用int **c = &b;来声明变量。

内存中具体形状
【开卷数据结构 】指针的初步认识

我们可以一直这样套娃下去。比如我们想要声明一个指向指针的指针的指针 ,就可以用int ***p = c文章来源地址https://www.toymoban.com/news/detail-415016.html

表达式 相等的表达式
a 10
b &a
*b a, 12
c &b
*c b, &a
**c *b, a, 10

练习

1.字符串长度,实现strlen函数

int StringLen (char *s)
{
	int n = 0;
	char *p = s;
	while( *p != '\0' )   
	{  
		n++; 
		p++; 
	}
	return n;
}

2.字符串长度,实现strlen函数

void CopyString(char *s1,char *s2)
{
	char *p1,*p2;
	for(p1 =s 1,p2 = s2; *p2 != '\0'; p1++,p2++)
	{
		*p1 = *p2;  
	}
	*p1 = '\0';
}

到了这里,关于【开卷数据结构 】指针的初步认识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【开卷数据结构 】2-3树

    目录 2-3树 的定义  2-3树 的结点  2-3树 的查找 参考代码  2-3树 的插入 向 2 结点中插入新结点 向 3 结点中插入新结点 图解过程:  参考代码:  2-3树 的删除 1.p是r的左结点 2.p是r的中结点 3.p是r的右结点 Q:什么是二叉排序树 A: 二叉排序树或者是一棵空树,或者是具有如下

    2024年02月11日
    浏览(51)
  • 【开卷数据结构 】二叉排序树(BST)

    目录 二叉排序树(BST) 二叉排序树的定义 二叉排序树的操作 二叉排序树的查找 代码演示 二叉排序树的插入 代码演示 二叉排序树的构造 代码演示 二叉排序树的删除 Q:什么是二叉排序树 A: 二叉排序树或者是一棵空树,或者是具有如下性质的二叉树 1) 若它的左子树不空

    2024年02月11日
    浏览(41)
  • 【开卷数据结构 】图的应用——最短生成树

    目录 最小生成树 Prim算法实现最小生成树 kruskal算法实现最小生成树 Q:什么是广度优先搜索 A: 一个连通图的生成树含有图中全部的顶点,并且只含尽可能少的边 。若砍去它的一条边,则会使生成树变成非连通图。若给它增加一条边,则会形成图中的一条回路。 对于一个带

    2023年04月09日
    浏览(45)
  • 【数据结构】前言概况 - 树

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章针对树形结构作出前言,以保证可以对树初步认知。  线性结构是一种相对简单的数据结构,元素之间按照一定的顺序排列,每个元素最多有两个接口:前驱和后继。这种结构相对直观

    2024年02月07日
    浏览(67)
  • 【算法与数据结构】--前言

    欢迎来到《算法与数据结构》专栏!这个专栏将引领您进入计算机科学领域中最重要、最精彩的领域之一:算法与数据结构。不管您是一名初学者,还是已经拥有一定编程经验的开发者,都可以从这里找到有益的知识和实践。 在计算机科学的世界里,算法和数据结构是至关重

    2024年02月07日
    浏览(244)
  • 数据结构前言

    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 上面是百度百科的定义, 通俗的来讲数据结构就是数据元素集合与数据元素集合或者数据元素与数据元素之间的组成形式。 举个简单明了的例子: 就像一个图书馆

    2024年02月09日
    浏览(50)
  • C语言数据结构(0)——前言

    欢迎来到博主的新专栏——C语言与数据结构 博主id:代码小豪 在前两个专栏当中,博主已经大致的讲过了C语言中的大部分使用方法。大家都知道,学习英语时,首先掌握的是单词,随后学习语法,如此才能融会贯通的学习英语。如果学英文只会单词,那么阅读虽然不成问题

    2024年01月17日
    浏览(42)
  • C++:类和对象(上)---初步认识类和this指针

    C语言是一门面向过程的语言关注的是过程,确认一个问题求解的步骤,再一步一步对它进行解决 C++是一门基于面向对象的语言,它更关注的是对象,将一个事情分成不同的对象,再用对象完成问题的解决 在C语言中有结构体,但结构体中只能定义变量,而在C++中还可以定义函

    2024年02月16日
    浏览(33)
  • 【数据结构】初步了解排序

      Yan-英杰的主页 悟已往之不谏 知来者之可追    C++程序员,2024届电子信息研究生 目录 1.排序的概念及其运用         1.1排序的概念           2.常见排序算法的实现         2.1插入排序         2.2希尔排序                问题:gap是多少合适?        

    2024年02月11日
    浏览(39)
  • MySql数据库的初步安装与数据表结构数据管理

    目录 一、数据库的相关了解 1)数据库的概念  数据(Data) 表 数据库系统 2)数据库系统发展史 第一代数据库 第二代数据库 第三代数据库 当今主流数据库介绍 2)数据库的分类  关系数据库 非关系型数据库 非关系型数据库的优点 二、mysql的yum安装与源码编译安装   1)源

    2024年02月08日
    浏览(361)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包