为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言指针与内存

难度初级
时长 2小时 5分
学习人数
综合评分9.60
263人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.4 逻辑清晰
str是指一个指针常量,指向的是一哥char数组开始地址,它指向的地址不能改变,但指向的地址内容是可以改变的,存放在函数栈区。str1是一个指向常理的指针,指向的对象可以变化,但执行的对象的内容不可用改变,这个内容是一个常量,存放在数据段区。所以,可以往str里面重复写东西,但str1指向的对象,内容不可用再做改变,所以无法重复写。而str3只是声明的一个地址而已,这里应该算是c语言的一个bug。只做声明不做检查,所以,通过操作str,str3指针直接往里面写东西,一不小心就内存栈溢出了,会覆盖掉其他内存,可能会发生这个视频演示的这种事情,只是覆盖了其他变量的内容,但也可能程序发生溢出或者崩溃
这一节课,才是整个指针最精华的部分
P[4]不是p往下面移动了4个位置,而是从p开始的地址往后移动4个位置取值,p指向的地址还是不变的
完全不对,数组的地址并不一定是和其他变量是连着的,这个例子完全是在误导人。
这节课完全不应该这么讲~虽然我知道你什么意思,无非就是说指针的地址也可以移动~不会出现数组越界的情况,也就是要十分小心的内存泄露,指针乱指。。。但整个表达方法不好

最赞回答 / 1宠儿011
我突然明白了,好傻啊,P运行了一次后,i就为1了呀
a i b array (array[2]并不知道跑到哪里去了)
讲的太好了 如果最初就能学到这些就太好了 新人好好学啊 都是精华啊
直接打印x/6cd str应该也可以显示出str数组的6个数值吧

已采纳回答 / onemoo
函数本身代码的地址并不在栈中,它们在代码段中。函数调用时才会将参数和各种用到的变量以栈帧结构存在栈中,这会使栈依照调用顺序来增长。所以参数的压栈地址可以说明它们的调用顺序。
32位只能寻找4G这没错,楼下说的APE,只是通过一种逻辑手段来实现超出4G的寻址,但这不表明32位机的寻址能力能超出4G。事实上,就算是扩展寻址,原理还是一个样~
课程须知
本课程是C语言中级课程,为了更好的学习效果: 1、需要有一定的C语言基础,如果没有基础的同学可以看《C语言入门》这门课。 2、本课程是在Linux环境下讲解,需要熟悉一些Linux命令。如果不了解的话可以在《Linux C语言编程基本原理与实践》这门课程中补充
老师告诉你能学到什么?
1、C语言中的指针是怎么回事 2、Linux下gdb调试工具是怎样使用的 3、指针与内存有着怎样的关系 4、数组与字符串之间的联系

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消