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

Linux C语言指针与内存

难度初级
时长 2小时 5分
学习人数
综合评分9.60
263人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.4 逻辑清晰
  • int a = 3; // 变量名只存在编译期,操作时转换成地址数存放在寄存器中 gdb p a => 3 int *pa = &a; // 变量pa 存放 变量a的地址数,指针变量 *pa 指向 变量a地址上的内容 int *pglobal = &global; // 全局变量可以在全局任意地方改变 int (*pquadrate)(int a) = &quadrate; int s = (*pquadrate)(a); // 调用pquadrate函数并传参,返回pquadrate函数指针,找到该函数(内容) printf("%d\n",s); return 0;
    查看全部
  • 数组当作内存地址输入的话,可以直接当作参数传进去,不用加&取址符
    查看全部
  • 一个十六进制的数字,就可以表示四位二进制的数字
    查看全部
  • GDB 调试工具 命令行 gdb -help // 查看安装及及用法 gcc -g main.c -o main.out // -g 函数编译时加入gdb调试 gdb ./main.out // 运行gdb调试代码 l (list简写) // 显示执行代码 只显示部分 可以输入l或直接回车以继续显示 start // 执行代码(单行执行)默认从主函数main开始 p a(a为变量) // 打印变量a的值 n // 继续执行下一行 s // 进入执行函数中(主函数中调用的函数) bt // 查看函数堆栈 f 1 // 切换到堆栈1(执行函数1)中 q // 退出调试
    查看全部
    2 采集 收起 来源:gdb工具的使用

    2016-10-09

  • CPU用地址总线寻址,有多少地址总线,就有多少种状态,就能寻找和使用多大的内存 32bit CPU: 2^32 bit== 4GB 64bit CPU: 2^64 bit 内存分配 -------------------------------------------- 系统内核 ------------------------------------------- 栈(暂时存储首先执行的程序状态) ------------------------------------------ 自由可分配内存(可动态分配内存) ----------------------------------------- 堆 ---------------------------------------- 数据段(声明一些全局变量或者声明一些常量) ---------------------------------------- 代码段(程序源代码编译后存放在此)
    查看全部
    2 采集 收起 来源:内存管理

    2016-08-08

  • 工具gdb内的指令格式: x/3d 0×7ffffffde14 x/:表示连续输出地址内的值 3:表示输出3个地址内的值 d:表示连续输出的值用十进制表示 0×7fffffffde14:表示三个连续地址里的第一个地址
    查看全部
  • 变量的本质是内存,指针的本质是地址!
    查看全部
  • 指针变量 定义int *a 地址符号&a
    查看全部
  • 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

  • :set num显示行号
    查看全部
  • 指针变量 定义int *a 地址符号&a
    查看全部
  • 交换两个变量的数值 通过指针的方法
    查看全部
  • p=print s=step n=next l=list bt=显示函数堆栈
    查看全部
    1 采集 收起 来源:gdb工具的使用

    2015-10-31

  • set nu 打开行号
    查看全部
  • 1.打印代码段的地址 查看某个函数编译后的二进制指令段在内存中代码段的地址: (gdb) p &函数名 2.打印数据段的地址 查看某个常量或全局变量在内存中数据段的地址: (gdb) p &常量名(全局变量名) 编译器会对源代码进行优化,编译后的指令顺序与我们编写代码的顺序可能不同。 编译器会将同一类型的变量声明放到一起。 64位操作系统下,指针占8个字节。
    查看全部

举报

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

微信扫码,参与3人拼团

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

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