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

Linux C语言指针与内存

难度初级
时长 2小时 5分
学习人数
综合评分9.60
263人评价 查看评价
9.9 内容实用
9.5 简洁易懂
9.4 逻辑清晰
  • char类型的指针变量 里面的值在代码段 用scanf输入数组类型的值时 可以不用加& 因为数组名称本身就是地址 指针类型的字符串不能输入 字符串遇到\0就结束不会打印后面
    查看全部
  • int arr[3]; arr[0]=4; arr[1]=5; arr[2]=6; int i; int *p,j; for(i=0;i<3;i++) printf("arr[%d]=%d\n",i,arr[i]); for(p=arr,j=arr,i=0;i<3;i++,j++) printf("p[%d]=%d %p j>>%d=%d %p\n",i,p[i],p,i,*j,j); 输出结果 arr[0]=4 arr[1]=5 arr[2]=6 p[0]=4 0x7fff883b1d20 j>>0=4 0x7fff883b1d20 p[1]=5 0x7fff883b1d20 j>>1=5 0x7fff883b1d24 p[2]=6 0x7fff883b1d20 j>>2=6 0x7fff883b1d28 通过实验得知 变量和数组的地址不一定是连在一起的 但是同一数组的元素是连着的 第一种 j++ 表示指针里保存的地址换成下一个数据地址,也就是改变了j的值 所以可以吧一个数组赋值给一个指针变量(赋值格式int *j=arr;)然后通过循环每次自增1来遍历这个数组 注意这种方法每次遍历都会改变j的值 即j保存的地址 *j打印保存的地址指向的值 j打印保存的地址 第二种 在把arr数组赋值给指针变量p后,p在转换打印时可以直接当成数组arr使用 比如p【1】p【2】等同于arr【1】arr【2】 注意 这种方法并不改变p保存的地址 即p保存的arr数组的第一个元素地址
    查看全部
  • 前提: Int a = 5; int *p=&a; 普通变量a的地址是:0x7fffffffddfc 指针变量p的地址是:0x7fffffffde08 变量本质是内存, 如:p和a 内存可以理解为是有内存地址和内存中保存的值组成 地址是16进制的整型表示的。 指针本质就是地址 ,如:*p ,即指针*p就是一个 地址 指针变量本质也是变量,如:p 指针变量的内存中保存的值是地址,如:0x7fffffffddfc &p是指针变量p自己内存的地址(注意区别:变量p中内存中值,就是普通变量a的内存地址) int *p=&a;// 指针变量的本质是内存,只是该种变量存放的不是普通的数据,而是地址。 指针变量p中保存的就是a的地址(即指针*p就是一个 地址(相当于空间的门牌号))。 输出p,结果是:0x7fffffffddfc 输出*p,结果是:5 int *p=&a;把a这个变量所在的内存地址赋值给了p这个指针变量,p也是一个变量,pa这个变量的内存是地址是0x7fffffffde08,这个地址保存的数据就是pa里面的东西0x7fffffffddfc,这个0x7fffffffddfc是a变量内存的地址。 *pa可以理解为:找到指针变量pa中保存的的地址中的值,注意要与“pa变量本身的地址区分开来” 普通变量放数据,指针变量放数据的地址 ,其实地址也是数据。
    查看全部
  • 指针本质就是地址
    查看全部
  • 1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。 2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。 3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。 4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。
    查看全部
    1 采集 收起 来源:gdb工具的使用

    2017-07-18

  • gdb的x命令,可以打印地址中的值 x/个数 地址 x/6cb 地址: 打印该地址后的6个字符,c:字符形式打印,b:按字节显示
    查看全部
  • main函数的参数: int main(int argv[],char* argc[]); 大用: ./main.out ls -a skjffl lssjdk ljsf main函数的返回值: return 0; 大用:./main.out && ls echo $? Unix操作系统认为"一切皆文件" Linux操作系统认为“一切皆文本流 text stream” stdin standard input 标准输入流 stdout standard output 标准输出流 stderr standard error 标准错误流 大用: fprintf(stdout,""); fscanf(stdin,"",); fprintf(stderr,""); redirect 重定向 stdin 0 < stdout 1 >或1>或1>>或>> stderr 2 2>或2>> 大用: ls >>wenjian.txt pipe 管道 大用:ls | grep ab ps -e| grep ssh 改变数据流的方向
    查看全部
  • x/3d 0x7fffffffde14的意思是 从0x7fffffffde14的地址开始以十进制(d)显示3个地址内的值
    查看全部
  • 32位机最大内存是4G 32根总线2的32次方bit=1024*1024**4K=1024**4M=4G
    查看全部
    1 采集 收起 来源:内存管理

    2017-02-22

  • 1.编译命令:gcc -g main.c -o main.out; 2.调试命令:gdb ./main.out; 3.调试器: (gdb)list:列出源代码,可以输入l或回车以继续显示; (gdb)break line-number:在指定行数打断点; (gdb)start:开启单步调试; (gdb)p a:打印a变量在内存中的情况; (gdb)n:执行到下一句; (gdb)bt:查看函数堆栈; (gdb)s:进入函数内部; (gdb)f 1:切换到编号为1的函数中; (gdb)q:退出调试;
    查看全部
    1 采集 收起 来源:gdb工具的使用

    2017-02-21

  • 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 + &函数名,显示函数程序在代码段的内存地址)
    查看全部
  • 32 位内存地址指针占 4 个字节,64位操作系统内存地址指针占用8个字节; 内存地址的大小决定了所在范围。
    查看全部
  • 变量的本质,变量只是一个代号,好比详细地址某市某街道某门牌号(变量)跟经纬度(内存地址)的关系,所以变量的本质就是内存地址,我的理解就是变量是内存地址的别名(代号)
    查看全部
  • gdp 工具可以打断点 编译的时候需要 -g 参数 gdb 运行编译文件(源文件需要存在) l 表示查看当前代码 回车表示执行上一个命令 break:打一个断点 start 默认的断点调试
    查看全部
    1 采集 收起 来源:gdb工具的使用

    2016-11-23

  • 64位系统下,指针占8个字节,32位 4个字节。 栈、先声明的地址大,后声明的地址小,与代码段数据段相反。 编译器优化代码,把声明时不在一起的同一类型变量,放到一起(某种程度上修改了源码) 如 声明 int a ; float b ; int c; 编译后变量a的地址和c的地址是连在一起的. 64位寻址下,指针占用8字节空间.
    查看全部

举报

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

微信扫码,参与3人拼团

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

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