| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 第一周周报 -> 正文阅读 |
|
[数据结构与算法]第一周周报 |
?本周主要学习了结构体并练习相关算法题但在练习时发现自身对于指针的理解还不透彻所以着力温顾下指针的内容。 指针是C语言很重要的概念之一,用于储存变量的地址,例如之前所学的scanf函数就是使用地址作为参数对一个变量进行赋值。
而其中&的作用就是给出变量的存储地址,例如上面的a是变量名,那么&a就是变量的地址。可以把地址看作是变量在内存中的位置。假如这样操作:
则会输出000000000062FE1C 和 12其中%p是输出地址的转换说明而000000000062FE1C则是PC地址用十六进制表示。 在学习指针之前我们可以对两个变量的值通过中间变量来交换数值但如果交换函数需要多次使用则在主函数中就会显得十分臃肿,而这是我们会想到用调用函数来解决问题,但在调用函数之后,我们遇到了一个新的问题
在这之后运行后会发现函数的并没有发生交换。 而其中的原因就是函数的形参是实参的一份拷贝(副本),上面的代码中,只是交换调用函数里的参数,只对副本(形参)进行交换当然不会实现对实参(我们实际要交换的变量)的交换。也就是说:我们只是交换a和b的值,并没有对x和y进行交换,但我们真正要交换的是x和y。 所以这时候我们就需要用传指针的方法来修改函数外部的变量,对形参进行指针类型的转变,将两个参数链接起来
其中 *为间接(或解引用运算符)后跟一个指针名或地址时*给出存储在指针指向地址上的值。 在这里通过&得到x,y的地址此时形参a,b把x,y的地址当做他们的值。因此,应把它们声明为指针。而其中x,y是整数所以a,b是指向整数的指针,所以用int *a来声明它们的指针然后用*对地址里的值进行操作就实现了数值的交换。 而数组与指针的关系十分密切,在程序的运行中数组所占的内存较大此时如果使用指针就会是程序的运行更有效率,指针能有效的处理数组。而数组表示法就是在变相的使用指针。 例如:数组名就是数组首元素的地址
这两都表示数组首元素的内存地址,两者都为常量,在程序的运行中不会发生改变。但可以把它们赋值给指针变量,然后可以修改指针变量的值。而在指针加上一个数时其地址也会发生变化:
00B3F828 其中arr与&arr[0]通过加1(加1后加的是存储单元加1以后的地址是下一个元素的地址)运算后发现地址加了4(因为arr为int类型的数组),而&arr通过加1运算后发现地址加了40,说明&arr表示的是整个数组的地址。 与此同时结构体与指针也有着密不可分的关系
和数组不同,结构变量的名字并不是结构变量的地址,必须使?&
运算符
而在使用结构指针时取结构体中的单元必须使用&p->x例如以下这个计算距离的函数
而使用指针传入结构的好处就是传入传出只是一个指针的大小 最后,在做题时,要注意题目要求,认真审题,对于一些还没来得及解决的问题要及时解决,不能拖拉。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:46:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |