最赞回答 / 小雾3378873
一段程序执行太快了,若想知道该程序在执行过程的每一步执行后对结果的影响或者了解该语句的作用,则需要一种调试工具,让他动作变慢,并且随着你的控制让他一步一步的执行,而且其间你可以用一些命令查看内存,验证结果,这就是gdb调试工具的作用。以下是我的笔记:GDB可以对程序进行断点调试,单步调试,如果用gdb调试,需要对程序重新编译,格式为:gcc –g main.c –o main.out这样生成的main.out才能用gdb调试。需要注意的是,在调试的时候不能删除原代码文件,即main.c ,如果将main....
2016-04-11
最新回答 / 实时编程
0x1 代表一个地址 不管是32位 还是64位系统 都是 使用 一个 32位 2进制 或者64位二进制 来 寻找这个地址而地址 里面 保存的 数据 是一个 8位 2进制数这个 8位2进制 恰巧是一个字节 所以 从0x1 到0x5 增加了 4个字节 不管是 32位 还是64位 地址只是表达 具体位置 里面的 内容 确实个8位的 2进制数 而已
2016-04-01
最新回答 / 慕后端9788028
我按楼主程序运行,在Linux下同样出现相同的情况,执行到循环时,gdb也不能打出值来。换了c-free ,第三个输出就出现莫名的值,我认为这是编译器的问题。
2016-03-26
最赞回答 / 慕后端9788028
p[4]=101代表从初始位置(a的地址就始)以四个字节为一步,向前走4步,到达某个位置,然后对这个位置进行初始化赋值,即把101赋给这个地址所代表的内存空间。p[4],*p=101,p[4]代表从初始位置(a的地址就始)以四个字节为一步,向前走4步,到达某个位置。*p=101,代表此时指针指向的地址(即走了四步后所在位置)并对这个地址所在的内存空间进行初始化,赋值101。p+=3于p=p+3等同,加的是步数,原理跟p[3]一样
2016-03-09
最赞回答 / 热喷Redpen
我把代码稍微改一下: int* a;这里的a就是代表指针变量(int*),而不是一个整型变量(int)所以a存放的是地址,*a才是地址中存放的值(这里的*与第一行的*不同,这个*是取地址的意思)
2016-01-27
最赞回答 / 刘小宇0215
先回答第二个问题,注意是16进制,不是十进制,内存可能分配半个字节吗,随着内存越来越廉价,程序设计一般是空间换时间,每个数组是int的四个字节。第一个问题是二维数组赋值给一维数组,应该很好理解,不过我不理解你为什么将那个表达式称为常量表达式,应该是变量表达式吧,而且这个数组[]里应该最大是11,而不是12也不会是12以上,具体细节如果不懂的话,建议你最好在命令行用gdb一步步的慢慢调试,我也是刚刚学,不过你犯的是常识错误。
2016-01-21
最新回答 / 奔跑的蜗牛Kevin
1、CPU的寻址能力以字节(byte)为单位 ,如32位的CPU可以寻址2的32次方的地址也就是4GB;2、32位、64位操作系统中的“位”并非计算机中的bit!!!
2016-01-12