• 在 Linux 系统中编写小程序

代码如下

编译并采用gdb调试  在调试之前设置三个参数   a   bb   ccc

输入 start 执行代码到 return 0;

从这里可以看到

argc = 4 argv是一个地址值

首先查看下argv[0] ~ argv[3]

可以看到字符指针 argv[0] 指向的地址值为 0x7fffffffe328   并且从此位置开始连续的内存单元用来存储 "/home/xlc/learnc/test.o"

此字符串加上尾部的 ‘\0’ 共24个字符

字符指针 argv[1] 指向的地址值为 0x7fffffffe340  从此位置开始连续的内存单元用来存储 "a"

并且 0x7fffffffe340 - 0x7fffffffe328 = 0x18   转化为十进制为 24  正好是 argv[0] 指向的字符串的字节数

同理

0x7fffffffe342 - 0x7fffffffe340 = 0x02  十进制为 2 正好是 argv[1] 指向的字符串的字节数("a\0"----> 共 2 个字节)

0x7fffffffe345 - 0x7fffffffe342 = 0x03  十进制为 3 正好是 argv[2] 指向的字符串的字节数("bb\0"----> 共 3 个字节)

下图是输出指针指向的那个字符

也可以说明 argv[] 是指向字符的字符指针

既然这四个指针被存在指针数组中  那也会有存储这几个指针的 内存

将它们的地址输出看一下

得到指针数组的内存地址

可以看到在内存中开辟了8个字节的单元来存储每个指针   因为本机是64位的   8 * 8 = 64 足够寻址了

那谁来管理它们呢??

换句话说 通过谁来找到它们呢??

答案就是 argv 这个变量   输出一下它的地址

并且在 main 开始执行时 argv 指向了存储 argv[0] 这个指针变量的地址

到此存储结构就应该搞懂了


  • 画个草图来表示一下

最新文章

  1. 北大poj-1091
  2. redis参数优化
  3. Firefox刷新页面和复选框的奇葩问题
  4. NHibernate系列文章二十六:NHibernate查询之SQL Query查询(附程序下载)
  5. 使用openssl创建自签名证书及部署到IIS教程
  6. ZXing二维码的生成和解析
  7. CentOS网卡配置文件
  8. python: linux下安装redis
  9. Java中toArray的用法探究(java数组与list转换)
  10. error: The shader requires a sampler in slot 0 which hasn't been set [XXXsampler]
  11. 磁盘IO性能监控(Linux 和 Windows)
  12. [LeetCode]题解(python):122-Best Time to Buy and Sell Stock II
  13. 关于DLL搜索路径顺序的一个问题
  14. 基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
  15. 结构-行为-样式-angularJs ngAnimate(Js实现)
  16. Swift数组的迭代访问
  17. MIRO做发票校验时实现替代功能的多种方式
  18. WebRoot 与 webContent的区别
  19. 意识科学初步:David Chalmers的简单问题与困难问题
  20. nginx替换响应头(重点:如何在替换时加上if判断)

热门文章

  1. 利用scrapy_redis实现分布式爬虫
  2. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)
  3. jQuery EasyUI API 中文文档 - 消息框(Messager)
  4. 将句子表示为向量(上):无监督句子表示学习(sentence embedding)
  5. OpenStack 存储服务 Cinder介绍和控制节点部署(十五)
  6. MySQL数据库以及表的管理
  7. Bellman-Ford 最短路径算法
  8. Lua程序设计(二)面向对象概念介绍
  9. sh脚本学习之: 命令处理
  10. 基于canvas将图片转化成字符画