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

Linux C语言指针与内存

难度初级
时长 2小时 5分
学习人数
综合评分9.60
263人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.4 逻辑清晰
  • 653b80e60001ea5807110400.jpg将str指针往下移了三个,将hello中第二个l替换为\0,将字符串提前结束
    查看全部
  • int *p=&a:定义的指针p是整型数据,p++之后,p中的地址就会增加4个字节。

    这就是指针偏移运算,这种方式比CPU直接取地址效率还要高,所以设计程序都会尽可能地采取这种方式。

    p+=3:将指针向下移动3格,如果p是整型,就移动12个字节。(等价于p[3])

    数组和指针的本质都是地址,所以*pa=array,相当于将array数组的地址赋值给pa指针,这样pa[1]的功能和array[1]的功能就没有区别了。

    数组是指针常量,
    指针是指针变量,
    指针能实现数组的功能,但是数组不一定能实现指针的功能。
    arry+=2会报错
    查看全部
    0 采集 收起 来源:指针运算

    2023-10-27

  • gdb命令:

    x/3d  地址:按照十进制d,连续显示3个(3)变量的地址(x),默认间隔为4个空格
    查看全部
  • 653b46bc0001a49610660600.jpg“p”是一个地址,则“*p”是到这个地址去取里面的值,“(*p)”表示为一个整体,“(*p)(数据)”若p为代码段,则调用这个函数,传参数"数据"进去

    查看全部
  • 最下面的内存最先分配

    最先分配的栈地址反而更大

    栈的特点:先进后出

    静态变量不在栈里头,相同变量名称的静态变量分别在两个函数里便为两个不同变量,属于每个函数特有的;

    全局变量为所有函数公用的。其地址不变。

    一个函数被多次调用时,静态变量指向的还是数据段一个固定的地址;即不同函数的count是不同的count,但同一个函数不管调用多少次count,它指向的都是数据段的某个地址。
    查看全部
  • 653b3ff40001011a10660600.jpg653b3ff900015b0410660600.jpg无&符,输出变量值
    有该符,输出地址
    查看全部
  • 变量名只是代号,变量的本质是内存;
    在标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。

    int *p=&a;    p 指针指向的变量地址; *p  指针指向的变量值; &p 指针自己所在的地址。既然一个指针保存的是变量的地址,对32位CPU,地址有4个字节,就需要4个内存单元来存储,所以每次++p在内存里都是跳4格。

    函数调用信息保存在栈(stack)中。 int *pa=&a指将a的地址传给pa。因此p pa看到的是a的地址(&a)。 而p &pa才能看到pa本身的地址。
    查看全部
  • 653b1ee200012dc910660600.jpg653b1ee400012d4710660600.jpg
    653b1ee8000150c610660600.jpg
    代码段放编译后的程序,数据段放常量、变量,中间的绿色是自由可分配空间。
    查看全部
    0 采集 收起 来源:内存管理

    2023-10-27

  • 653b1cf60001799310660600.jpg653b1cf80001bbb910660600.jpg0x表示十六进制
    查看全部
  • 653a5b9c0001544b07110400.jpg加了地址符后的a表示一个地址,*a是去找到该地址下对应的值653a5bd50001715907110400.jpg可以看出0中a为地址,需*a找到对应值
    1中a为确切值
    查看全部
  • gdb   -help完整显示各种用法653a575f00012d2407110400.jpg(gdb)start  开始执行
    红框为自动设置的断点为12行处653a57a60001097107110400.jpg(gdb) p a
    分别为printf a   即为输出变量a
    (gdb)  n
    为换到下一行653a5891000105d007110400.jpg
    653a58930001294d07110400.jpg(gdb)  bt   查看函数堆栈
    堆栈像书,摞在上面先执行653a594a0001035e07110400.jpg(gdb) f 1
    f为切换栈,即切换到栈1
    单用change,由于形参,两个函数中a.b不同,无法改变--所以需要指针
    查看全部
    0 采集 收起 来源:gdb工具的使用

    2023-10-26

  • 653a55c700012bd007110400.jpg*a   表指针
    &a  取地址
    查看全部
  • 注意:这里偏移三格指向arrary[0]是因为中间有一个变量i,然后是b,然后才是array[0],而不是array[1]
    查看全部
    0 采集 收起 来源:指针运算

    2022-06-15

  • 指针变量上加*表示:打印其保存的地址指向的值
    查看全部
    0 采集 收起 来源:指针运算

    2022-06-15

  • 不带&符号:打印变量里面的值
    否则:打印变量的地址
    查看全部
首页上一页1234567下一页尾页

举报

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

微信扫码,参与3人拼团

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

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