为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Linux C语言指针与内存_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Linux C语言指针与内存

DavidChin
难度初级
时长 2小时 5分
  • gcc -g main.c -o main.out生成调试版本<br> gdb ./main.out 进行调试<br> gdb下list 或者 l 列出源代码 回车继续刚才的指令 或者 `继续输出 l 将源代码显示完整<br> start 开始调试 从main函数下面第一句开始<br> q 退出 print(p) a 查看a变量的值<br> n 进入下一行,还未执行<br> step(s) 进入函数中 bt 查看函数堆栈 f 1 跳到1这个栈
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2018-03-22

  • 1.内存空间中栈和堆的空间是程序员可以更改的,但是代码段是不允许程序员更改的(代码段:程序编译后生成的机器码,双击运行后会直接加载运行)
    查看全部
  • 1.指针的偏移要比直接用CPU控制地址总线还要高效!<br> 2.int *p;<br> //p[4]的意义是:指针p往下移动4格(中括号:偏移计算)!与数组有不同的意义!<br> p[4]=5;//指针p往下移动4个单位空间后的指向空间赋值5;<br> 3.int array[3] 声明的数组中array既是数组名,又是数组的首地址;所以<br> int *p;<br> p=array;<br> //p[n]和array[n]有相同的数值,在功能上可以相互转化。<br> 所以:可以说,数组能做的指针都可以做到;指针能做到的数组不一定能做到!<br> 原因:array作为一个数组,目的是存储,其指向的地址没必要改变,是常量;<br> 而p作为指针,目的是操作,是变量!<br> 4.char str[10];<br> scanf("%s",str);<br> 和scanf("%s",&str);有相同的功能,也就是说:&是多余的<br> 因为str是字符型数组名,也就是字符数组的首地址(本身就是地址当然不用取址符)
    查看全部
    1 采集 收起 来源:指针运算

    2018-03-22

  • 32位系统中指针占4个字节; 64位系统中指针占8个字节; 指针的本质就是一个地址
    查看全部
  • 计算机内存模型: 1、系统内核; 2、栈内存; 3、自由可分配内存; 4、堆内存; 5、数据段; 6、代码段;
    查看全部
    0 采集 收起 来源:内存管理

    2016-01-22

  • 32位操作系统,地址总线为2的32次方(4G),所以支持的最大内存为4G
    查看全部
    0 采集 收起 来源:内存管理

    2016-01-22

  • 变量的本质是内存 指针本质就是存放地址的内存
    查看全部
  • 字符串指针(char *str)指向的字符串存放在代码段,而字符数组(char str[])的字符串存放在栈中。 代码段不能被修改,只有在栈内存或者堆内存的数据才能修改。
    查看全部
  • 内存分配
    查看全部
    0 采集 收起 来源:内存管理

    2016-01-22

  • 1. int quadraate(int a);是一个函数 int (*pquadrate)(int a)=&quadrate;则是指向这个函数的指针! int s=(*pquadrate)(a)可以调用函数! 2.一个指针变量*q 不加*号:P q 取出自己地址中存储的值(一个地址)。 加*号:P *q 取出指向地址中存储的值。
    查看全部
  • 1.GCC会对内存变量分配进行优化:同一种变量类型会放到一块儿!<br> 2.静态变量、常量、全局变量存于内存的数据段(数据段位置高于代码段)。 3.64位计算机中:地址都是用64bit表示的,所以指针(存储地址)占64bit,即8字节。 注意图中:&pa -> &pb的确是增加了8个字节(16进制中满16进1); 同理:从de18 -> de20也是增加了8个字节。 4.栈区域(最接近系统控制的内存空间)保存的是函数的运行状态:函数执行到哪一个命令?每一个变量保存的什么值?等等 5.在代码段和数据段(区),内存是从低地址向高地址转移的,即:先声明的函数地址小,后声明的函数地址大;而在栈中,刚好相反。
    查看全部
  • 1.区分<br> P &a;<br> P pa;<br> P &pa; 2.在标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。(防止用户自己操作内存地址时侵吞系统内存或者其他程序的内存)
    查看全部
  • 若某一个地址不足64位,只是表示残缺的尾数都是前面的0,比如:5685125即0000000005685125 1.注意地址和内存空间的对应。 2.64bit操作系统中0~0*7fffffffffff(11个f)是留给用户/程序员使用的,剩余的0*7fffffffffff~0*ffffffffffffffff是供操作系统调用的)。 3.用户的内存隔离:将应用程序和操作系统的内存隔离开是有好处的,使操作系统更加安全! 4.32bit的计算机最多使用4G的内存!
    查看全部
    0 采集 收起 来源:内存管理

    2016-01-21

  • 采集自:Ephone_Chan(略有改动) ,转载请注明 1.编译命令:gcc -g main.c -o main.out; 2.调试命令:gdb ./main.out; 3.调试器:(gdb)list:列出源代码;(gdb)break line-number:在指定行数打断点;(gdb)start:开启单步调试; (gdb)p a:打印a变量在内存中的情况;(gdb)n:执行到下一句;(gdb)s:进入函数内部;(gdb)bt:查看函数堆栈; (gdb)f 1:切换到编号为1的函数中;(gdb)q:退出调试; 4.回车键:继续执行上一条指令。 5.gdb命令 (1)x/10d 起始地址 从起始位置向后取10个值(10),以10进制输出(d) 例如: (gdb) x/6d 0×7fffffffde1c (2)*:到某个地址找个东西
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2016-01-24

  • 字符串与指针
    查看全部

举报

0/150
提交
取消
课程须知
本课程是C语言中级课程,为了更好的学习效果: 1、需要有一定的C语言基础,如果没有基础的同学可以看《C语言入门》这门课。 2、本课程是在Linux环境下讲解,需要熟悉一些Linux命令。如果不了解的话可以在《Linux C语言编程基本原理与实践》这门课程中补充
老师告诉你能学到什么?
1、C语言中的指针是怎么回事 2、Linux下gdb调试工具是怎样使用的 3、指针与内存有着怎样的关系 4、数组与字符串之间的联系
友情提示:

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