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

Linux C语言指针与内存

DavidChin
难度初级
时长 2小时 5分
  • 5-4实验二
    查看全部
  • 字符串数组里 最后位为\0(反斜杠0) ,遇到时,会认为字符串已经结束。 此处把第四位替换之后,做实验
    查看全部
  • 5-3字符串数组和指针字符串 gdb: x/6cb,c:字符形式 :b byte为单位 堆和栈内存里才可以写入(预留空间才可写入)
    查看全部
  • 20161013 5-2指针运算符 内存空间声明时,编译器会做优化 同类型会在一起声明 ※参照(20161013 数组申明的内存排序5-1) int *p=&a; int *p指针类型,整形int , p++ 声明时int整形,++表示下一个地址(+一个 类型(此时为int),指针偏移) p+= 3; 表示下一移动三个) *p += 3; 表示把p指向的地址的值+3 int main() { int a=3; int b=2; int array[3]; //左侧数组可使用指针操作(array属于指针常量,不可以array+=3等偏移,但指针可以) //int *pa=array; array[0] = 1; //pa[0]=1; array[1] = 10; //pa[1]=10; array[2] = 100;//pa[2]=100; int *p=&a;// *p 指针类型,&a把 a类型的地址赋给*p p+=3;//指针偏移 方式1 p+=3, //方式2 p[4](本行和下行和第三行(p+=3;*p=101;p=&a;)可写为p[4]=101 ;) *p=101;//把array[0]的值赋值为101 p=&a; int i; for(i=0;i<6;i++){ printf("*p=%d\n",*p); P++; } printf("*--------------------------------------------------\n"); p=&a;// a类型的地址赋给p for(i=0;i<6;i++){ printf("p[%d]=%d\n",i,p[i]);//p P++; } }
    查看全部
    0 采集 收起 来源:指针运算

    2018-03-22

  • memory address
    查看全部
  • memmory address
    查看全部
  • x/3d 0xffffffffde14("x/3d"输出从0xffffffffde14开始的内存的值,3表示输出三个,d表示用十进制) p * 0xffffffffde14//打印该地址的值 C语言存在代码幽灵(不检查指针是否合法) 20161013 数组申明的内存排序5-1 例子程序: int main() { int a=3; int b=2; int array[3]; array[0] = 1; array[1] = 10; array[2] = 100; int *p=&a;// *p 指针类型,&a把 a类型的地址赋给*p int i; for(i=0;i<6;i++){ printf("*p=%d\n",*p); P++; } printf("*--------------------------------------------------\n"); p=&a;// a类型的地址赋给p for(i=0;i<6;i++){ printf("p[%d]=%d\n",i,p[i]); P++; } }
    查看全部
  • 函数指针4-6 4-6函数指针 quadrate在代码段时, p quadrate 函数的内存地址(quadrate ) p *quadrate 在地址前加*,表示通过地址取值 (quadrate)表示整体 (*quadrate)(3) :调用函数,传参3。 "(*quadrate)"表示代码段。 b)*quadrate 指向堆,栈时,数据段 时,访问数据 c)*quadrate 指向代码段时 找到打包到一起的代码块 d) *通过保存的地址取值,不加*表示取该变量的的内存地址本身
    查看全部
  • 20161011 C语言指针和内存4-1 数据表示方法 内存:一个字节8个2进制 32位操作系统(32个地址总线,2的32次幂 2的30次方1024的3次方,就是1G)做多使用4G内存 64位操作系统(2的30次方 =G,2的40次方=T)0xffffffffffffffff - 0x0 内存的管理由操作系统管理,给内存编号,给内存进行规划 1)0x7fffffffffffffff - 0x0为用户使用的内存。 2)其他~0xffffffffffffffff为操作系统内核使用) 例子 p pa 0xffffffffffffddfc//pa里保存的内容(内容的内存地址) p &pa 0xffffffffffffde08// 指针 pa的内存地址 指针8个字节 本质上保存的是内存的地址: 变量:a=第五个柜子第二个抽屉 指针 b:第一个柜子第一个抽屉 内容 :第五个柜子第二个抽屉) 系统内核 栈 (高地址段 先进后出 记录程序已经执行的信息,P &a ,"& '取地址'运算符 " &a表示显示变 量a的内存地址空间,) 自由可分配内存 堆() 数据段(全局变量,常量,静态变量) 代码段(低地址段 编译后的程序的机器码保存位置) C语言不允许直接操作代码段 为static变量也就是静态变量,在程序运行过程中被声明后就会一直保存在内存里,所以只能声明一次,第二次再访问那个函数时,给静态变量声明同时赋值的语句就不再执行了,而静态变量的值始终保存在内存里,也就是上次改变以后的值。 没有static修饰的函数中的变量,只在函数被执行时占用内存,函数执行完毕后就被销毁,数据也就不存在了,所以每次都要声明,值也就不会变。
    查看全部
  • 变量和指针说明例子程序-1 static int : 为static变量也就是静态变量,在程序运行过程中被声明后就会一直保存在内存里,所以只能声明一次,第二次再访问那个函数时,给静态变量声明同时赋值的语句就不再执行了,而静态变量的值始终保存在内存里,也就是上次改变以后的值。 没有static修饰的函数中的变量,只在函数被执行时占用内存,函数执行完毕后就被销毁,数据也就不存在了,所以每次都要声明,值也就不会变。
    查看全部
  • ****************************** 20161011 gdb工具(分析原理和结果) gcc 的调试工具 gdb(gdb -help) gcc -g main.c -main.out (调试模式) 调试命令: gdb main.out l(list 显示源代码,l 或者 enter 继续执行l 继续显示) 1 break 12(行号) 打断点 2 start 单步调试 3 n(next 下一行) 4 p a (print 打印变量a) 5 s (step 进入方法,n执行下一行) 6 bt 查看函数堆栈 7 f 切换函数堆栈(f 1 切换到1) 8 q 退出调试 9 p *a(int *a 时 p a 打印出的是a的内存地址,p *a打印的是这个地址里对应的值.P &a 显示a的内存地址空间 P &functionname p + &函数名,显示函数程序在代码段的内存地址)
    查看全部
  • 一个十六进制的数字,就可以表示四位二进制的数字
    查看全部
  • 注意函数实参与函数形参的区别 函数的域 指针执行地址 传递时传递地址 void change(int *a, int *b) { // 函数形参a b 皆为指针类型,调用函数传值时所传为地址 int temp = *a; // 此处*a 是通过指针a找到其内存地址位置的值 ... }
    查看全部
  • 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

  • GDB LINUX下 c语言内存调试工具
    查看全部

举报

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

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