问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C深刨_指针与数组_指针篇【指针就该这样学!!!看完这一个专题,以后关于...

发布网友 发布时间:2024-09-26 04:02

我来回答

1个回答

热心网友 时间:2024-10-07 09:05

什么是指针左值与右值

先明确什么叫做左值和右值做一下铺垫

我们反汇编一下,深刻认识一下!!!

#include<stdio.h>int?main(){????int?a?=?10;????int?b?=?a;//使用的是a的内容?a==10???????return?0;}

知道了什么是左值和右值,再来看一下什么是指针

1.什么是指针? 指针就是地址!那么地址本质是什么呢?地址是数据,那么数据可不可以被保存在变量空间里面呢?当然可以 2.有没有指针变量这个概念呢? 当然有了,保存指针(地址)相关数据的变量就是指针变量 3. 指针 和 指针变量又有何不同?我们口语中的"定义一个指针"究竟是什么意思?我们该如何理解这种说法 严格意义上,指针和指针变量是不同的,指针就是地址值,而指针变量是C中的变量,要在特定区域开辟空间,要用来保存地址数据,还可以被取地址。(先分开) 但是,我们经常在口语化表达的时候,又经常将这两个概念混合,具体原因无从考证,可能是与最早的C资料的翻译有关。然后,书与书之间互相借鉴,形成了这样的说法。同时,简化说法,也更符合人的表达习惯,估计老外也是这么想的。(在关联) 那么我们以后怎么认为呢?我们分开理解,但是依旧关联使用。自己使用的时候,混合使用可以。

看一下指针变量的左右值

所以得出结论:指针变量也是区分左值右值的 经过上面的叙述我们也把指针和指针变量分开了,解释:其实指针就是地址,地址就是数据呀,是数据就可以被存放呀,那么指针变量就来了,指针变量就是存放地址(指针)数据的,好,我们现在已经把这两个概念分开了,接下来我们就合并它 :leaves: 看这组代码:

#include<stdio.h>int?main(){????int?a?=?10;????int?*p?=?&a;????p?=?(int*)0x1234;????int?*R?=?p;????return?0;}

解释:

这幅图一定要好好理解很重要!!!!!!!!

为什么有指针

我们以生活中的例子宿舍楼为例

像这样的宿舍楼,那么多层,如果要找一个房间如果没有门牌号是不是会很不方便,所以建筑师很聪明,为每个房间都搞了个门牌号,我们的内存也是,一个地址代表一个空间,这样我们在找数据的时候直接按照地址就可以找到。效率很高不用再遍历整个内存再找数据。

这时有人就想问了,你刚才说地址也是数据,那这个数据是多大的呢,占几个字节空间呢?

答案是:在32位平台指针占4字节,在64位平台占8字节。

那又有人想问了,我们还要保存这些地址数据吗,一个字节空间有一个地址,一个地址就4个字节,光保存地址,内存也放不下呀 其实是不用的,cpu用硬件电路对内存按照字节编址

简单理解一下编址

解引用

总结一个口诀:在类型相同的情况下,对指针进行解引用,表示指针所指向的目标【一定要熟记于心】 解释:

:blossom:*p完整理解是,取出p中的地址,访问该地址指向的内存单元(空间或者内容)(其实通过指针变量访问,本质是一种间接寻址的方式)

如何将数值存储到指定的内存地址(栈随机化)

知道了指针的本质就是地址,地址就是数据,那么我们可以直接通过地址数据对变量进行访问吗??? 我们来试一下!!! 答案是不行的,我们也也没看见过这样直接访问的吧,我们都是间接访问!!!

但是为啥不能呢?

目前主流的编译器和操作系统,为了安全,已经有了很多内存保护的机制。我们目前的win和Linux都有栈随机化这样的机制来方式黑客对用户数据地址进行预测。当然,还有其他的栈保护机制,比如“金丝雀”技术之类的

接下来我测试一下这个“栈随机” 第一次 第二次

我们看每次变量的地址都是不一样的吧,意思就是你存进去的内容不变,但是地址是动态变化的,这样就避免了,黑客推算出某些地址存在重要内容,而盗之。 这下能明白为啥不能直接访问了吧,你在变量存的内容的地址是动态变化的,每次运行时,地址就变,没准就变化到0x1234这个地址,这不就访问冲突了吗,所以编译器会提示错误。

全局变量呢,有保护机制吗?

第一次

第二次 一样哦

换一下位置就变了

对全局变量也有相关的保护!!!!

一道有趣的指针题目:#include<stdio.h>int?main(){????int?*p?=?NULL;????p?=?(int*)&p;????*p?=?10;????p?=?20;????return?0;}

自己先看一下该如何理解 解释:** 恭喜看到最后,老夫看你骨骼精奇,送你三句话:

对指针进行解引用,代表指针所指向的目标!!!

对指针进行解引用,代表指针所指向的目标!!!

对指针进行解引用,代表指针所指向的目标!!!**

热心网友 时间:2024-10-07 09:04

什么是指针左值与右值

先明确什么叫做左值和右值做一下铺垫

我们反汇编一下,深刻认识一下!!!

#include<stdio.h>int?main(){????int?a?=?10;????int?b?=?a;//使用的是a的内容?a==10???????return?0;}

知道了什么是左值和右值,再来看一下什么是指针

1.什么是指针? 指针就是地址!那么地址本质是什么呢?地址是数据,那么数据可不可以被保存在变量空间里面呢?当然可以 2.有没有指针变量这个概念呢? 当然有了,保存指针(地址)相关数据的变量就是指针变量 3. 指针 和 指针变量又有何不同?我们口语中的"定义一个指针"究竟是什么意思?我们该如何理解这种说法 严格意义上,指针和指针变量是不同的,指针就是地址值,而指针变量是C中的变量,要在特定区域开辟空间,要用来保存地址数据,还可以被取地址。(先分开) 但是,我们经常在口语化表达的时候,又经常将这两个概念混合,具体原因无从考证,可能是与最早的C资料的翻译有关。然后,书与书之间互相借鉴,形成了这样的说法。同时,简化说法,也更符合人的表达习惯,估计老外也是这么想的。(在关联) 那么我们以后怎么认为呢?我们分开理解,但是依旧关联使用。自己使用的时候,混合使用可以。

看一下指针变量的左右值

所以得出结论:指针变量也是区分左值右值的 经过上面的叙述我们也把指针和指针变量分开了,解释:其实指针就是地址,地址就是数据呀,是数据就可以被存放呀,那么指针变量就来了,指针变量就是存放地址(指针)数据的,好,我们现在已经把这两个概念分开了,接下来我们就合并它 :leaves: 看这组代码:

#include<stdio.h>int?main(){????int?a?=?10;????int?*p?=?&a;????p?=?(int*)0x1234;????int?*R?=?p;????return?0;}

解释:

这幅图一定要好好理解很重要!!!!!!!!

为什么有指针

我们以生活中的例子宿舍楼为例

像这样的宿舍楼,那么多层,如果要找一个房间如果没有门牌号是不是会很不方便,所以建筑师很聪明,为每个房间都搞了个门牌号,我们的内存也是,一个地址代表一个空间,这样我们在找数据的时候直接按照地址就可以找到。效率很高不用再遍历整个内存再找数据。

这时有人就想问了,你刚才说地址也是数据,那这个数据是多大的呢,占几个字节空间呢?

答案是:在32位平台指针占4字节,在64位平台占8字节。

那又有人想问了,我们还要保存这些地址数据吗,一个字节空间有一个地址,一个地址就4个字节,光保存地址,内存也放不下呀 其实是不用的,cpu用硬件电路对内存按照字节编址

简单理解一下编址

解引用

总结一个口诀:在类型相同的情况下,对指针进行解引用,表示指针所指向的目标【一定要熟记于心】 解释:

:blossom:*p完整理解是,取出p中的地址,访问该地址指向的内存单元(空间或者内容)(其实通过指针变量访问,本质是一种间接寻址的方式)

如何将数值存储到指定的内存地址(栈随机化)

知道了指针的本质就是地址,地址就是数据,那么我们可以直接通过地址数据对变量进行访问吗??? 我们来试一下!!! 答案是不行的,我们也也没看见过这样直接访问的吧,我们都是间接访问!!!

但是为啥不能呢?

目前主流的编译器和操作系统,为了安全,已经有了很多内存保护的机制。我们目前的win和Linux都有栈随机化这样的机制来方式黑客对用户数据地址进行预测。当然,还有其他的栈保护机制,比如“金丝雀”技术之类的

接下来我测试一下这个“栈随机” 第一次 第二次

我们看每次变量的地址都是不一样的吧,意思就是你存进去的内容不变,但是地址是动态变化的,这样就避免了,黑客推算出某些地址存在重要内容,而盗之。 这下能明白为啥不能直接访问了吧,你在变量存的内容的地址是动态变化的,每次运行时,地址就变,没准就变化到0x1234这个地址,这不就访问冲突了吗,所以编译器会提示错误。

全局变量呢,有保护机制吗?

第一次

第二次 一样哦

换一下位置就变了

对全局变量也有相关的保护!!!!

一道有趣的指针题目:#include<stdio.h>int?main(){????int?*p?=?NULL;????p?=?(int*)&p;????*p?=?10;????p?=?20;????return?0;}

自己先看一下该如何理解 解释:** 恭喜看到最后,老夫看你骨骼精奇,送你三句话:

对指针进行解引用,代表指针所指向的目标!!!

对指针进行解引用,代表指针所指向的目标!!!

对指针进行解引用,代表指针所指向的目标!!!**

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人类如何才能悬浮在空中? - 知乎 人体悬浮术是真的存在吗 人体怎样才能真正的在空中悬浮 小孩c蛋白反应高是什么原因 (2014?南海区二模)如图所示,物重G为2000N,小红用800N的拉力花2s的时间... 苹果13系列升级iOS15.5好吗? 出生2o12年11月20日2点姓石光字辈取名 求龙凤胎名字:2012年6月21日(农历5月初3)凌晨0点40分出生,大的为龙,小... by和take有什么区别 takeby后面跟交通工具的区别 ...指针方面的知识里, P= ﹠a和﹡P= ﹠a有什么区别,分别代表什么含义... 最近在自学C语言 请问一下 P=&amp;a,和*p=a有什么区别么 (能举一下例子么... ...C语音中指针&amp;*a与*&amp;a的区别,用直白点的话解释,书上的理解不了_百度... 白居易的《长恨歌》究竟恨谁?为何源头与唐玄宗有关? 一个钩子钩了一个愿字 答一成语 微软官方win10制作工具安装的是最新版吗 原生操作系统安装盘如何制作?使用微软官方工具MediaCreationTool制作Wind... 什么样的银行卡跨行跨区取钱不收手续费 经常在外地,取现金。 PT1/8"是什么意思 银行卡跨区存款收费吗 如何解开手机中国移动pin码 cad怎么将图纸中一部分显示一部分隐藏? 临沂银行卡在枣庄属于跨区吗 CAD遮盖命令怎么用 ASTM D-256 塑料缺口冲击中出现的 1/4" 1/8" 什么意思 五谷磨房和今磨房哪个好 如何在cad中隐藏图层线? 国内品质较好的代餐粉有哪些呢? 怎样修改pin密码 wipeout命令在中望CAD的用法 怎么在电子文档上签字盖章? 《韩非子》的内容简介 《企业微博管理手册》txt全集下载 企业微博管理手册内容简介 韩非子简介及作品介绍 韩非子·难言第三作者简介 玉树华王文化有限公司怎么样? 莆田市荔城区华王建材有限公司怎么样? 安仁县福磊石业有限公司怎么样? 美股熔断什么意思有什么后果 什么是美国熔断 公积金1320工资多少 华为g750一t01插上手机u盘怎没反应? 华为g750-t01可以重emui直接回复出厂设置吗 深圳住房公积金 基数如何定(不依公文描述的)? 哪些果汁能减肥 psp马甲卡只能读一张卡 荒野行动掩体怎么运用介绍_荒野行动掩体怎么运用是什么 荒野行动怎么拖拽队友 韩国女团组合MV里的开场,其中一个蓝色短卷发是假发,还挺胸。这个MV谁...